1. 基本配置
1.1 入口类
Spring Boot通常以一个名为*Application的类作为入口类,入口类里的main方法(即标准的Java应用的入口方法)作为Spring Boot应用项目的入口方法。
@SpringBootApplication是Spring Boot的核心注解,这是一个组合注解,源码为:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
Class>[] exclude() default {};
String[] excludeName() default {};
String[] scanBasePackages() default {};
Class>[] scanBasePackageClasses() default {};
}
因此,不使用@SpringBootApplication注解,可以在入口类上直接使用@Configuration、@EnableAutoConfiguration、@ComponentScan。
其中@EnableAutoConfiguration让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。
Spring Boot 会自动扫描@SpringBootApplication所在类的同级包,以及包下的Bean。因此,建议入口类放置在groupId+artifactId组合的包名下。
1.2 自动配置的关闭
关闭特定的自动配置应该使用@SpringBootApplication注解的exclude参数。
例如:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
1.3 Banner
在Spring Boot启动的时候有一个默认的启动图像:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.9.RELEASE)
1.3.1 修改Banner
- 在工具网站生成字符。
- 在/src/main/resources下新建banner.txt,将生成的字符复制到这个文件中。
- 再次启动程序,可以看到引导图案变成指定的样式。
1.3.2关闭Banner
- 在main函数中设置:
SpringApplication app = new SpringApplication(DemoApplication.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
1.4 Spring Boot的配置文件
Spring Boot的全局配置文件application.properties或者application.yml,位于/src/main/resources目录或类路径的/config下。
1.5 starter pom
通过使用应用场景所需要的start pom 。相关的技术配置将会消除,可以得到Spring Boot提供的自动配置的Bean。
1.5.1 官方提供的starter pom
名称 | 描述 |
---|---|
spring-boot-starter | springboot核心starter ,包括自动配置,日志,yaml配置文件的支持 |
spring-boot-starter-actuator | 准生产特性,用来监控和管理应用 |
spring-boot-starter-remote-shell | 提供基于ssh协议的监控和管理 |
spring-boot-starter-amqp | 使用spring-rabbit支持AMQP |
spring-boot-starter-aop | 使用AOP和AspectJ支持面向切面编程 |
spring-boot-starter-batch | 对springBatch支持 |
spring-boot-starter-cache | 对SpringCache抽象的支持 |
spring-boot-starter-cloud-connectors | 对云平台(Cloud Foundry ,Heroku)提供的服务简化的连接方式 |
spring-boot-starter-data-elasticsearch | 对spring-data-elasticsearch的支持 |
spring-boot-starter-data-gemfire | 对分布式存储GemFire的支持 |
spring-boot-starter-data-jpa | 对jpa的支持,包括spring-data-jap,spring-orm,Hibernate |
spring-boot-starter-data-mongodb | 通过spring-data-mongodb对mongodb的支持 |
spring-boot-starter-data-rest | 通过spring-data-rest-webmvc对spring Data reposity暴露为REST形式的服务 |
spring-boot-starter-data-solr | 通过spring-data-solr对Apache Solr的支持 |
spring-boot-starter-data-freemaker | 对Freemaker的支持 |
spring-boot-starter-data-groovy-templates | 对Groovy模版引擎的支持 |
spring-boot-starter-hateoas | 通过spring-hateoas对基于HATEOAS的REST形式的网络服务的支持 |
spring-boot-starter-hornetq | 通过HornetQ对JMS的支持 |
spring-boot-starter-integration | 对系统集成框架spring-integration的支持 |
spring-boot-starter-jdbc | 对JDBC数据库的支持 |
spring-boot-starter-jersey | 对Jersey REST形式的网络服务的支持 |
spring-boot-starter-jta-atomikos | 通过Atomikos对分布式事物的支持 |
spring-boot-starter-jta-bitronix | 通过Bitronix对分布式事物的支持 |
spring-boot-starter-mail | 对spring mail的支持 |
spring-boot-starter-mobile | 对spring mobile的支持 |
spring-boot-starter-mustache | 对Mustache模版引擎的支持 |
spring-boot-starter-redis | 对键值对内存数据库Redis的支持,包含spring-redis |
spring-boot-starter-security | 对spring-security的支持 |
spring-boot-starter-social-facebook | 通过spring-social-facebook 对facebook的支持 |
spring-boot-starter-social-twitter | 通过spring-social-twitter 对twitter的支持 |
spring-boot-starter-social-linkedin | 通过spring-social-linkedin 对linkedin的支持 |
spring-boot-starter-thymeleaf | 对Thymeleaf模版引擎的支持,包含于spring的整合配置 |
spring-boot-starter-velocity | 对velocity模版引擎的支持 |
spring-boot-starter-web | 对web项目开发的支持,包含tomcat和spring-webmvc |
spring-boot-starter-Tomcat | springboot默认容器tomcat |
spring-boot-starter-Jetty | jetty容器 |
spring-boot-starter-undertow | Undertow容器 |
spring-boot-starter-logging | 默认日志输出框架Logback |
spring-boot-starter-log4j | 支持log4j |
spring-boot-starter-websocket | websocket的支持 |
spring-boot-starter-ws | spring webservice的支持 |
1.5.2 第三方starter pom
存在第三方为Spring Boot编写的starter pom。
1.6 使用xml配置
Spring Boot提倡零配置,即无xml配置,但是需要使用xml配置的话,可以通过Spring提供的@ImportResource来加载xml,例如:
@OmportResource({"classpath:some-context.xml","classpath:another-context.xml"})
2.外部配置
Spring Boot 允许使用properties文件,yaml文件或者命令行参数作为外部配置。
2.1命令行参数配置
Spring Boot可以基于jar包运行的,打包成jar包的程序可以通过以下命令运行:
java -jar xx.jar
因此可以通过设置java命令的参数为项目设定参数,例如修改Tomcat端口号:
java -jar xx.jar --server.port=9090
2.2 常规属性配置
在Spring Boot中,在application.properties文件中定义属性,直接使用@Value即可注入。
例如:
(1)在application.properties中添加属性:
boot.author=asd
book.name=spring boot
(2)在类中可以用以下方式获取属性值:
@Value("${book.author}")
private String bookAuthor;
@Value("${book.name})
private String bookName;
2.3 类型安全的配置
Spring Boot可以通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全的配置。
例如:
(1)在application.propertie中添加
author.name=asd
author.age=25
(2)在Bean进行关联
@Component
@ConfigurationProperties(perfix = "author")
public class AuthorSettings {
private String name;
private Long age;
public String getName() {
return name;
}
public Long getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Long age) {
this.age = age;
}
}
(3)在类中引用
@RestController
@SpringBootApplication
public class DemoApplication {
@Autowired // 使用@Autowired直接注入
private AuthorSettings authorSettings;
@RequestMapping("/")
public String index(){
return "Author name is " + authorSettings.getName() + ", and the age is " + authorSettings.getAge() + ".";
}
public static void main(String[] args){
SpringApplication.run(DemoApplication.class,args);
}
}
3. 日志配置
- Spring Boot支持Java Util Logging、Log4J,Log4J2和Logback作为日志框架。
- 选择框架后,Spring Boot会为当前日志框架的控制输出以及文件输出做好设置。
- 默认情况下,Spring Boot使用Logback作为日志框架。
- 配置日志文件:
logging.file=D:/logs/log.log
- 配置日志文件
logging.level.org.springframework.web = DEBUG
4. Profile配置
*Profile是Spring根据不同的环境的不同配置来提供支持的。
- 全局Profile使用application-{profile}.properties。
- 通过在application.properties中设置spring.profiles.active = prod来制定活动的Profile