使用springboot配置和占位符獲取配置文件中的值
springboot配置和占位符獲取配置文件值
@PropertySource& 加載指定的配置文件
package com.example.springbootdemo.pojo; import com.alibaba.fastjson.JSON; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * ***GOOD LUCK**** * * @Author : Wukn * @Date : 2018/6/ * * 將配置文件中的的每一個(gè)屬性的值,映射到這個(gè)組建中 *@ConfigurationProperties * prefix = "persion" 指定在配置文件中需要將persion的配置屬性映射到這個(gè)實(shí)體類中 */ /** * 獲取指定配置文件 * @PropertySource( value = {"classpath:coms.properties"}) */ @Component /** * @ConfigurationProperties(prefix = "persion"),默認(rèn)獲取根目錄下的值 */ @ConfigurationProperties(prefix = "persion") public class Persion { private String name; private Integer id; private Boolean bool; public Persion() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Boolean getBool() { return bool; } public void setBool(Boolean bool) { this.bool = bool; } @Override public String toString() { return JSON.toJSONString( this ); } }
@ImportResource 導(dǎo)入指定的配置文件
以上方式過于麻煩,springboot推薦通過全注解方式,添加組件的方式
通過注解@Configration申明一個(gè)配置類,通過注解@Bean可以使用在方法上面,申明一個(gè)組件的生成,要是放在方法上,表明這個(gè)方法的返回值放在ioc容器中
package com.example.springbootdemo.configration; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; /** * Created with IntelliJ IDEA. * Description: Cms數(shù)據(jù)源的一些設(shè)置 * Date: 2018-06-08 * Time: 5:50 PM * * @author: wukn */ @Configuration public class DataConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory factory) { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility( PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping( ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
通過占位符獲取值
#通過使用占位符賦值 persion.name=張三${random.value} persion.bool=false persion.id=12${random.int} person.last‐name=張三${random.uuid} person.age=${random.int} person.birth=2017/12/15 person.boss=false person.maps.k1=v1 person.maps.k2=14 person.lists=a,b,c person.dog.name=${person.hello:hello}_dog person.dog.age=15
springboot配置文件,占位符的使用
首先要給到注解
讓user類可用通過配置文件進(jìn)行實(shí)例化
package com.example.springdemo.entity; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import java.util.List; @Component//把User加到容器中 @Data /** * @ConfigurationProperties * 可以將配置文件中的每一個(gè)屬性的值,映射到這個(gè)組件中 * 告訴springboot將奔雷中的所有屬性和配置文件中的相關(guān)屬性先綁定 * prefix = "com"綁定配置文件com層級(jí)下的屬性進(jìn)行一一映射 * 只有是容器才能使用所以要添加注解@Component */ @ConfigurationProperties(prefix = "com") public class User { private Long id; private String name; private Integer age; private List<Object>list; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge(int i) { return age; } public void setAge(Integer age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } private String email; public Integer getAge() { return age; } public List<Object> getList() { return list; } public void setList(List<Object> list) { this.list = list; } }
配置文件
com.email=99@dfp.com com.name=newDFP${com.cc:不存在給默認(rèn)值} com.age=${random.int}
首先就是對(duì)age取隨機(jī)數(shù)然后對(duì)name獲取對(duì)象的數(shù)據(jù)
運(yùn)行最后一個(gè)測(cè)試類
package com.example.springdemo; import com.example.springdemo.entity.User; import com.example.springdemo.mapper.UserMapper; import com.example.springdemo.properties.Myproperties; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; import org.springframework.test.context.junit4.SpringRunner; import javax.sql.DataSource; import java.sql.SQLException; import java.util.List; @SpringBootTest @RunWith(SpringRunner.class) class SpringdemoApplicationTests { //如果測(cè)試類與啟動(dòng)入口類包名不一致,必須加該注解屬性classes指定啟動(dòng)入口類,否則無法啟動(dòng)SpringBoot @Autowired private DataSource dataSource; @Test public void dataSource() { try { System.out.println(dataSource.getConnection()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Autowired Myproperties myproperties; @Test void test(){ System.out.println("------------------------"); System.out.println(myproperties.getMes()); } @Autowired UserMapper userMapper; @Test void testMybatisPlus(){ List<User> users=userMapper.selectList(null); for (User user:users){ System.out.println(user); } System.out.println("查詢成功!"); User aduuser=new User(); // aduuser.setName("DFP"); // aduuser.setAge(18); // aduuser.setEmail("DFP19053025@qq.com"); // aduuser.setId(19053065L); int i=userMapper.insert(aduuser); if (i>0){ System.out.println("成功加入記錄!"); }else{ System.out.println("失敗加入記錄!");} for (User user:users){ System.out.println(user); } } @Autowired User user; @Test public void contextlodes(){ System.out.println("測(cè)試結(jié)果輸出:"+user); } }
結(jié)果
因?yàn)閏om.cc是不存在的就回去:后面的默認(rèn)值
如果com.cc存在就會(huì)取com.cc的值
測(cè)試如下
com.email=99@dfp.com com.name=newDFP+++${com.email:不存在給默認(rèn)值} com.age=${random.int}
這次的值不再是默認(rèn)值了com.email是存在數(shù)據(jù)的
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis-Plus中公共字段的統(tǒng)一處理的實(shí)現(xiàn)
在開發(fā)中經(jīng)常遇到多個(gè)實(shí)體類有共同的屬性字段,這些字段屬于公共字段,本文主要介紹了MyBatis-Plus中公共字段的統(tǒng)一處理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08解決Netty解碼http請(qǐng)求獲取URL亂碼問題
這篇文章主要介紹了解決Netty解碼http請(qǐng)求獲取URL亂碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Java創(chuàng)建可執(zhí)行的Jar文件的方法實(shí)踐
創(chuàng)建的可執(zhí)行Jar文件實(shí)際就是在原始Jar的清單文件中添加了Main-Class的配置,本文主要介紹了Java創(chuàng)建可執(zhí)行的Jar文件的方法實(shí)踐,感興趣的可以了解一下2023-12-12Hadoop運(yùn)行時(shí)遇到j(luò)ava.io.FileNotFoundException錯(cuò)誤的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Hadoop運(yùn)行時(shí)遇到j(luò)ava.io.FileNotFoundException錯(cuò)誤展開,文中有非常詳細(xì)的解決方法,需要的朋友可以參考下2021-06-06springcloud檢索中間件?ElasticSearch?分布式場(chǎng)景的使用
單機(jī)的elasticsearch做數(shù)據(jù)存儲(chǔ),必然面臨兩個(gè)問題:海量數(shù)據(jù)存儲(chǔ)問題、單點(diǎn)故障問題,本文重點(diǎn)給大家介紹springcloud檢索中間件?ElasticSearch?分布式場(chǎng)景的運(yùn)用,感興趣的朋友跟隨小編一起看看吧2023-10-10