1.首先创建一个Maven项目,Pom文件的内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>myproject</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.6.RELEASE</version> </parent> <dependencies> <!-- add typical dependencies for a web application --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <!-- Spring Boot提供了一个用于创建可执行jars的Maven插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
项目的目录结构如下:
1.编写Application
package com.zto.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * * * 我们的Example类上使用的第一个注解是@RestController。这被称为一个构造型注解。它为阅读代码的人们提供建议。 * 对于Spring,该类扮演了一个特殊角色。在本示例中,我们的类是一个web @Controller,所以当处理进来的web请求时, * Spring会询问他 * */ @RestController @SpringBootApplication public class Application{ /** * @RequestMapping注解提供路由信息。它告诉Spring任何来自"/"路径的请求都应该被映射到home方法。 * @RestController注解告诉Spring以字符串的形式渲染结果,并直接返回给调用者 。 */ @RequestMapping("/") String home(){ return "Hello World"; } public static void main(String[] args) throws Exception{ SpringApplication.run(Application.class, args); } }
2.直接运行Application中的main方法,然后在浏览器中输入http://localhost:8080/
3.@SpringBootApplication注解【该@SpringBootApplication注解等价于以默认属性使用@Configuration, @EnableAntoConfiguration 和 @ComponentScan。】
4.@ConfigurationProperties注解【任何被@ConfigurationProperties注解的beans将自动被Environment属性(application.properties,application.yml中的配置)配置】
package com.zto.demo.bean; import java.net.InetAddress; import javax.validation.constraints.NotNull; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix="connection") public class ConnectionSettings { private String username; /** * Spring Boot将尝试校验外部的配置 * NotNull校验remoteAddress字段不能为空,否则启动服务将会报错 */ //@NotNull private InetAddress remoteAddress; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public InetAddress getRemoteAddress() { return remoteAddress; } public void setRemoteAddress(InetAddress remoteAddress) { this.remoteAddress = remoteAddress; } @Override public String toString() { return "username :" + username + ", remote :"+remoteAddress; } }
5.编写application.properties以及application.yml
person.name=gaoweigang
application.ymml文件配置
my: servers: - dev.bar.com - foo.bar.com mother: LiuJinJu first-name: GAO connection: username: admin #remoteAddress: 192.168.1.1
6.编写MyBean
package com.zto.demo.bean; import java.util.ArrayList; import java.util.List; import javax.validation.constraints.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @ConfigurationProperties(prefix="my") public class MyBean { /** * 将application.properties文件捆绑到jar内,用来提供一个合理的默认name属性值 */ @Value("${person.name}") private String name; /** * 测试生成整形随机数 */ @Value("${random.int}") private int age; /** * 使用Spring DataBinder工具绑定YAML文件中的属性(这是@ConfigurationProperties做的事),你需要确定目标bean中 * 必须要有可变的值初始化它(因为List是可变的,所以就不用配置相应的setter方法), * 比如,下面的代码将绑定上面的属性 */ private List<String> servers = new ArrayList<String>(); /** * 推荐使用,尽量不要使用@Value()这种方式,这种方式太笨重了 * 使用Spring DataBinder工具绑定YAML文件中的属性(这是@ConfigurationProperties做的事),你需要确定目标bean中 * 必须要有setter方法(因为String是不可变的,所以必须配置setter方法),比如,下面的代码将绑定上面的属性 */ private String mother; /** * 松散绑定(Relaxed binding):application.yml中的字段不必和bean中的成员变量名完全一致 * 必须要有相应setter()方法 */ private String firstName; @Autowired private ConnectionSettings connection; @RequestMapping("/hello") public String hello(){ return "Hello "+name + "<br/>age :"+age + "<br/>servers: " + this.getServers() + "<br/>mother: "+ this.getMother()+ "<br/>first-name:"+firstName; } @RequestMapping("/connectionTest") public String connection(){ return connection.toString(); } public List<String> getServers() { return servers; } /* public void setServers(List<String> servers) { this.servers = servers; }*/ public String getMother() { return mother; } public void setMother(String mother) { this.mother = mother; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } }
6.浏览器验证
①使用http://localhost:8080/hello
②使用http://localhost:8080/connectionTest
适当的解释:
一.Starter POMs
Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合。你可以获取所有Spring及相关技术的一站式服务,而
不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。例如,如果你想使用Spring和JPA进行数据库访问,只需要在你的项目中
包含spring-boot-starter-data-jpa依赖,然后你就可以开始了。
该starters包含很多你搭建项目,快速运行所需要的依赖,并提供一致的,管理的传递依赖集。
名字有什么含义:所有的starters遵循一个相似的命名模式:spring-boot-starter-*,在这里*是一种特殊类型的应用程序。
该命名结构旨在帮你找到需要的starter。很多IDEs集成的Maven允许你通过名称搜索依赖。例如,使用相应的Eclipse或STS
插件,你可以简单地在POM编辑器中点击ctrl-space,然后输入“spring-boot-starter"可以获取一个完整列表。
二.配置类
Spring Boot提倡基于Java的配置。尽管你可以使用一个XML源来调用SpringApplication.run(),我们通常建议你使用
@Configuration类作为主要源。一般定义main方法的类也是主要@Configuration
自动配置
Spring Boot自动配置尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且
你没有手动配置任何数据连接beans,那么我们将自动配置一个内存型数据库。
你可以通过将@EnbleAntoConfiguration或者@SpringBootApplicaiton注解添加到一个@Configuration类上来选择自动配置。
禁用特定的自动配置
如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解排除属性来禁用它们。
例如:@EnableAntoConfiguration(exclude={DataSourceAutoConfiguration.class})
三.使用@SpringBootApplication注解
很多Spring Boot开发者总是使用@Configuration, @EnbleAntoConfiguration和@ComponentScan 注解他们的main类。
由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时),Spring Boot提供一个方便的@SpringBootApplication
选择。
该@SpringBootApplication注解等价于以默认属性使用@Configuration, @EnableAntoConfiguration 和 @ComponentScan。
四.运行应用程序
将应用打包成jar并使用一个内嵌HTTP服务器的一个最大好处是,你可以像其他方式那样运行你的应用程序。调试Spring Boot
应用也很简单:你不需要任何特殊IDE或扩展
Web环境
一个SpringApplication将尝试为你创建正确类型的ApplicationjContext。在默认你情况下,使用AnnotationConfigApplicationContext
或AnnotationConfigEmbeddedWebApplicationContext取决于你正在开发的是否是web应用。
用于确定一个web环境的算法相当简单(基于是否存在某些类)。如果需要覆盖默认的行为,你可以使用setWebEnvironment(boolean webEnvironment)。
通过调用setApplicationContextClass(...),你可以完全控制ApplicationContext的类型。
注:当JUnit测试里使用SpringApplication,调用setWebEnvironment(false)是可取的
五.外化配置
Spring Boot允许外化你的配置,这样你能够在不同 的环境下使用相同的代码。你可以使用properties文件,YAML文件,
环境变量和命令行参数来外化配置。使用@Value注解,可以直接将属性值注入到你的beans中,并通过Spring的Environment
抽象或绑定到结构化对象来访问。
Spring Boot使用一个非常特别的PropertySource次序来允许对值进行合理的覆盖,需要以下面的次序考虑属性:
1.命令行参数
2.来自于java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.只有在random.*里包含的属性会产生一个RandomValuePropertySource(生成随机数的)
Application属性文件
SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Environment中:
1.当前目录下的一个/config子目录
2.当前目录
3.一个classpath下的/config包
4.classpath根路径(root)
这个列表是按优先级排序的(列表中的位置高的将覆盖位置低的)
注:你可以使用YAML('*.yml')文件替代'.properties'
如果不喜欢将application.properties作为配置文件名,你可以通过指定spring.config.name环境属性来切换其他的名称。
你也可以使用spring.config.location环境属性来引用一个明确的路径(目录位置或文件路径列表以逗号分隔)。
二.特定的Profile属性
除了application.properties文件,特定配置属性也能通过命令惯例application-{profile}.properties来定义。特定
Profile属性从跟标准application.properties相同的路径加载,并且特定profile文件会覆盖默认的配置。
三.属性占位符
当application.properties里的值被使用时,它们会被存在的Environment过滤,所以你能够引用先前定义的值(比如,系统属性)。
app.name=MyApp
app.description=${app.name} is a Spring Boot application
注:你也能使用相应的技巧为存在的Spring Boot属性创建'短'变量
四.使用YAML代替Properties
YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。无论你何时将Snake YAML库放到classpath下,
SpringApplicaiton类都会自动支持YAML作为properties的替换。
注:如果你使用'starter POMs', Spring-boot-starter会自动提供Snake YAML。
五.加载YAML
Spring框架提供两个便利的类用于加载YAML文档,YamlPropertiesFactoryBean会将YAML作为Properties来加载,
YamlMapFactoryBean会将YAML作为Map来加载。
六.YAML缺点
YAML文件不能通过@PropertySource注解加载。所以,在这种情况下,如果需要使用@PropertySource注解的方式加载值,
那就要使用Properties文件。
七.
@PostConstruct 注解的含义
八.@ConfigurationProperties校验
Spring Boot将尝试校验外部的配置
相关推荐
SpringBoot HelloWorld 是一个初学者经常会遇到的示例项目,它旨在帮助开发者快速了解并开始使用Spring Boot框架。Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化新Spring应用的初始搭建以及开发过程...
SpringBoot HelloWorld程序是初学者入门SpringBoot框架时最常见的示例项目。这个程序旨在展示如何快速地搭建一个基于SpringBoot的应用,并包含简单的测试用例来验证功能。以下将详细讲解SpringBoot的基本概念、Hello...
《SpringBoot HelloWorld初探》 在当今的Java开发领域,SpringBoot框架因其简化Spring应用的初始搭建以及开发过程而备受青睐。"springboot-helloworld.rar"这个压缩包,显然是一个入门级的示例,旨在帮助开发者快速...
在"springboot-helloworld"项目中,我们将深入探讨SpringBoot的基础知识和实践应用。 首先,让我们从“helloworld”这个经典的起点开始。在SpringBoot项目中,创建一个简单的"Hello, World!"应用通常涉及到以下步骤...
SpringBoot的第一个工程内容是HelloWorld,具体实现过程可以看我的blog,关于SpringBoot的学习(一)
这个"springboot的helloworld入门程序"是初学者理解并掌握SpringBoot基础的一个绝佳起点。下面我们将深入探讨SpringBoot的基本概念、核心特性以及如何创建一个简单的"Hello, World!"程序。 1. **SpringBoot简介** ...
**SpringBoot之HelloWorld的Maven项目(Eclipse)** SpringBoot是由Pivotal团队开发的一个框架,旨在简化Spring应用程序的初始搭建以及开发过程。它集成了大量的常用库,如数据访问、安全、Web等,使得开发者可以...
初识sprngboot
在"Hello World"示例中,通常有一个带有`@SpringBootApplication`注解的主类。这个注解集成了`@Configuration`(配置)、`@EnableAutoConfiguration`(自动配置)和`@ComponentScan`(组件扫描),从而启动Spring ...
SpringBoot HelloWorld 示例是一个基础的Web应用,用于演示Spring Boot框架的基本使用。Spring Boot是由Pivotal团队提供的一个全新框架,其设计目标是用来简化新Spring应用的初始搭建以及开发过程。它集成了大量的...
SpringBoot-HelloWorld SpringBoot HelloWorld入门应用程序-Udacity Java Nanodegree 下载 https://start.spring.io/ Spring Boot 2.1.8 RELEASE 在命令行上运行 mvn spring-boot:run 在浏览器中
利用springboot开发的简易helloworld的war包,供测试使用
在 "spring-boot-helloworld.zip" 这个压缩包中,我们很可能是找到了一篇关于 Spring Boot 入门的博客文章示例代码,用于展示如何构建一个简单的 "Hello World" 应用。 在 Spring Boot 中创建一个 "Hello World" ...
**Wicket HelloWorld程序详解** Wicket是一个开源的Java Web应用程序框架,它强调组件化和模型-视图-控制器(MVC)的设计模式。这个“Wicket的HelloWorld”程序是初学者入门Wicket的典型例子,它展示了如何利用...
"hello-world-rest:Springboot Hello World REST服务"是一个典型的入门级项目,它展示了如何使用Spring Boot创建一个简单的RESTful Web服务。REST(Representational State Transfer)是一种架构风格,常用于构建Web...
SpringBoot 入门Demo源码,只是单纯的分享给有需要的人使用,俗话说的好,万事开头难,当迈开了第一步,就相当于打开了一扇门,发现了新大陆,所以我们要持之以恒,才能取得成功,让我们一起努力,为心中最美好的...
创建独立的 Spring 应用程序 嵌入的 Tomcat,无需部署 WAR 文件 简化 Maven 配置 自动配置 Spring 提供生产就绪型功能,如指标,健康检查和外部配置 开箱即用,没有代码生成,也无需 XML 配置。
spring-boot-helloWorld:spring-boot的helloWorld版本 spring-boot-mybaits-annotation:注解版本 spring-boot-mybaits-xml:xml配置版本 spring-boot-mybatis-mulidatasource:springboot+mybatis多数据源最简解决...