经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
二、SpringBoot基础配置
来源:cnblogs  作者:码之泪殇  时间:2019/10/9 9:00:22  对本文有异议

2.1 @SpringBootApplication

上篇文章中知道@SpringBootApplication是加载启动类上的一个组合注解,源码定义:

  1. @Target({ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Inherited
  5. @SpringBootConfiguration
  6. @EnableAutoConfiguration
  7. @ComponentScan(
  8. excludeFilters = {@Filter(
  9. type = FilterType.CUSTOM,
  10. classes = {TypeExcludeFilter.class}
  11. ), @Filter(
  12. type = FilterType.CUSTOM,
  13. classes = {AutoConfigurationExcludeFilter.class}
  14. )}
  15. )
  16. public @interface SpringBootApplication {
  17. //other code...
  18. }

可以看到这个注解包含了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan三个常用的注解,他们的作用如下:

  • @SpringBootConfiguration 其实质就是一个@Configuration,表示被注解的类是一个配置类,developer可以在该类中配置Bean
  • EnableAutoConfiguration 表示开启自动化配置
  • @ComponentScan 对包进行扫描(注解@Service@Repository@Component@Controller@RestController@Configuration等),默认扫描的类都位于当前类所在包的以及子包,因此通常将启动类放在项目根包中

    2.2 SpringBoot配置文件

    2.2.1 Properties配置

    SpringBoot完成了大量的自动化配置,但是开发过程中,难免需要我们自己定义配置一些信息,比如数据库的配置,因此SpringBoot提供了properties配置,SpringBoot会默认读取application.properties中的配置信息。
    SpringBoot项目中的application.properties的存放位置以及优先级关系:
  • 1、项目根目录的config目录下
  • 2、项目根目录下
  • 3、classpath:/config目录下
  • 4、classpath下

application.properties的配置信息以键值对(key = value)的形式编写:

  1. server.port=8080
  2. user.name=gongSir
  3. user.major=computer
  4. user.grade=2017
  5. server.error.path=/error

加粗样式

2.2.2 YAML配置

YAML是JSON的超集,是一种专门用来写配置文件的语言,简介而强大,可以用来替代application.properties。YAML简单易上手,用缩进表示层级关系,区分大小写。
现在改写上文的properties,将文件后缀改成yml,即application.yml:

  1. server:
  2. port: 8080
  3. error: /error
  4. user:
  5. name: gongSir
  6. major: computer
  7. grade: 2017

2.2.3 读取配置文件中的自定义信息

无论是properties还是yaml配置都会被SpringBoot加载到environment中。spring提供了@Value注解以及EnvironmentAware接口将Spring Environment中的数据注入到bean属性上,demo如下:
首先在pom中引入依赖:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-configuration-processor</artifactId>
  4. <optional>true</optional>
  5. </dependency>

现在来读取上文的user信息,写一个bean:

  1. @Component
  2. //user是前缀
  3. @ConfigurationProperties(prefix = "user")
  4. public class User {
  5. private String name;
  6. private String major;
  7. private String grade;
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public String getMajor() {
  15. return major;
  16. }
  17. public void setMajor(String major) {
  18. this.major = major;
  19. }
  20. public String getGrade() {
  21. return grade;
  22. }
  23. public void setGrade(String grade) {
  24. this.grade = grade;
  25. }
  26. @Override
  27. public String toString() {
  28. return "User{" +
  29. "name='" + name + '\'' +
  30. ", major='" + major + '\'' +
  31. ", grade='" + grade + '\'' +
  32. '}';
  33. }
  34. }

添加一个/user接口:

  1. @RestController
  2. public class HelloController {
  3. @GetMapping(path = "/hello")
  4. public String hello(){
  5. return "hello spring boot!";
  6. }
  7. @Autowired
  8. User user;
  9. @GetMapping(path = "/user")
  10. public String user(){
  11. System.out.println(user);
  12. return user.toString();
  13. }
  14. }

使用@Autowired注解注入注册的bean信息,然后接口输出信息:
在这里插入图片描述
使用@Value注解,修改上述代码:

  1. @RestController
  2. public class HelloController {
  3. @GetMapping(path = "/hello")
  4. public String hello(){
  5. return "hello spring boot!";
  6. }
  7. @Value("${user.name}")
  8. String myName;
  9. @Autowired
  10. User user;
  11. @GetMapping(path = "/user")
  12. public String user(){
  13. System.out.println("myName: "+myName);
  14. System.out.println(user);
  15. return user.toString();
  16. }
  17. }

控制台:
在这里插入图片描述

2.2.4 profile切换运行环境

在生产开发过程中,项目上线之前,经常需要切换运行环境,即在开发环境、测试环境、预发布、发布环境之前切换,而这些不同的环境往往有不同的配置文件信息,每次都去修改application.properties难免复杂繁琐,SpringBoot提供了很好的解决方案,SpringBoot中约定了不同环境下配置文件的名称规则为application-{profile}.properties(YAML同理),profile表示当前环境的名称,具体配置:
1、创建配置文件
假设现在有test和dev两个环境,我们在resource下分别创建==application-test.properties==、==application-dev.properties==,分别表示测试环境和开发环境的配置,简单配置:
==application-dev.properties==:

  1. server.port=8080

==application-test.properties==:

  1. server.port=8081

2、修改application.properties
接下来我们在==application.properties==中配置环境名称即可:

  1. spring.profiles.active=dev

演示test环境启动:
在这里插入图片描述
在这里插入图片描述
演示dev环境启动:
在这里插入图片描述
在这里插入图片描述

2.3 服务器配置

2.3.1 Tomcat配置

SpringBoot内置了默认的tomcat服务器,因此不需要特别配置,如需修改tomcat端口等信息,可在上文中的application.properties文件中配置:

  1. #端口号
  2. server.port=8081
  3. #错误页面
  4. server.error.path=/error
  5. #session失效时间
  6. server.servlet.session.timeout=30m
  7. #Tomcat的请求编码
  8. server.tomcat.uri-encoding=utf-8

更多配置参考官方文档!

2.3.2 Jetty配置

除了Tomcat,SpringBoot也支持嵌入Jetty,配置如下:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. <!-- 取出Tomcat默认项 -->
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-tomcat</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <!-- 嵌入Jetty服务器 -->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-jetty</artifactId>
  16. </dependency>

因为SpringBoot默认在web中内嵌了Tomcat,因此需要从web中去除tomcat,然后加入Jetty依赖即可。
启动项目:
在这里插入图片描述

2.4 修改启动banner

SpringBoot项目启动时会在后台打印一个banner,如下图:
在这里插入图片描述
我们也可以自己定制想要的启动页:
resource目录下新建一个==banner.txt==文件,把想打印的字符保存在这个TXT里面,SpringBoot启动时,就会打印出来:
在这里插入图片描述
也可以定制艺术字体,直接去这里定制,然后复制到banner中即可!
在这里插入图片描述
在这里插入图片描述

小结

本文主要介绍SpringBoot的基础配置,包括启动注解、配置文件、服务器配置等。待续......

原文链接:http://www.cnblogs.com/gongsir/p/11637350.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号