总结一下注解方式的属性注入,顺便引入一下SpringBoot的注解@ConfigurationPropertiesjava
user.username=jack user.password=root user.hobby[0]=book user.hobby[1]=music
@Data @AllArgsConstructor @NoArgsConstructor @PropertySource("application.properties") public class User { @Value("${user.username}") private String username; @Value("${user.password}") private String password; @Value("${user.hobby[]}") private String[] hobby; private Address address; private List list; private Set set; private Map map; private Properties properties; } //这种方式很难注入复杂的引用类型,并且一个个注入太麻烦了
@Data @Component //@ConfigurationPropertiesScan //@ComponentScan(basePackages = "com.ty") @ConfigurationProperties(prefix = "user") @ConditionalOnBean(name = "user") public class User { private String username; private String password; private String[] hobby; private Address address; private List list; private Set set; private Map map; private Properties properties;
@Data @ConfigurationProperties(prefix = "user") @EnableConfigurationProperties(User.class) public class User { private String username; private String password; private String[] hobby; private Address address; private List list; private Set set; private Map map; private Properties properties; }
另外@EnableConfigurationProperties注解不止能够修饰在POJO上,还能够写在应用类上spring
@SpringBootTest(classes = User.class) @EnableConfigurationProperties(User.class) public class TestUser { @Autowired private User user; @Test void testUser1() { System.out.println(user); } }
ps:若是编写测试程序代码最好跟业务代码相关类的那个包保持相同数据库
好比java下的com.ty.service,测试的时候最后也是建一个相同的包,即:test下的com.ty.service编程
也能够不相同,这样的话就须要在@SpringBootTest注解上配置上要进行的测试类,并且还须要配置@ComponentScan或者数组
@ConfigurationPropertiesScan注解,用来扫描启动类tomcat
再说一下条件装配注解@Conditional,这个注解以前说过是指知足Conditional指定的条件,才会进行组件注入服务器
在SpringBoot对它进行了不少实现app
下面就说说配置文件,SpringBoot一共支持2种配置文件,Properties配置和YAML配置,两种配置文件通用,只是展示方式的区别运维
和之前的properties用法相同,以key = value的方式,不过多赘述!maven
YAML是“YAML Ain't Markup Language YAML不是一种标记语言”的外语缩写,但为了强调这种语言以数据作为中心,而不是以置标语言为重点,而用返璞词从新命名。它是一种直观的可以被电脑识别的数据序列化格式,是一个可读性高而且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。它是相似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单不少。
基本使用:
使用key : 空格 value的方式表示
大小写敏感
使用缩进表示层级关系
禁止使用tab缩进,只能使用空格键
缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
使用#表示注释
符串能够不用引号标注
数据格式表示
或者
key: - value1 - value2 - value3
或者
key : key 1: value1 key 2: value2 key 3: value3
基本/简单类型:key : value
键值对集合类型:key : {key 1:value1, key 2:value2, key 3:value3}
数组/集合类型:key: [value1,value2,value3]
举例
首先先导一下依赖,这样配置的时候会有自动提示
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!--打jar包的时候忽略配置提示的相关类--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
建立application.yml或者application.yaml
user: username: tom password: root hobby: - book - "music" - 'eat' list: [a,b,c,a] set: - a - b - c - a map: name: james tom score: 85 65 other: {pet: tomcat,hobby: sing} address: [大连,上海,杭州,杭州] properties: {book: 西游}
配置文件能够用在多环境配置,实际开发中,同一套代码可能同时部署到开发、测试、生产等多个服务器中,每一个环境中诸如数据库密码等这些个性化配置是避免不了的,虽然咱们能够经过自动化运维部署的方式使用外部参数在服务启动时临时替换属性值,但这也意味着运维成本增高。
步骤很是简单,直接在resources目录下建立多个配置文件
好比:application-dev.yml、application-test.yml、application-prod.yml、application.yml
而后在其它的配置文件编写对应环境的配置,使用的时候直接在application.yml配置中切换环境
spring: profiles: active: dev/test/prod