使用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/
*
* 將配置文件中的的每一個屬性的值,映射到這個組建中
*@ConfigurationProperties
* prefix = "persion" 指定在配置文件中需要將persion的配置屬性映射到這個實體類中
*/
/**
* 獲取指定配置文件
* @PropertySource( value = {"classpath:coms.properties"})
*/
@Component
/**
* @ConfigurationProperties(prefix = "persion"),默認獲取根目錄下的值
*/
@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 導入指定的配置文件

以上方式過于麻煩,springboot推薦通過全注解方式,添加組件的方式
通過注解@Configration申明一個配置類,通過注解@Bean可以使用在方法上面,申明一個組件的生成,要是放在方法上,表明這個方法的返回值放在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=15springboot配置文件,占位符的使用
首先要給到注解
讓user類可用通過配置文件進行實例化

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
* 可以將配置文件中的每一個屬性的值,映射到這個組件中
* 告訴springboot將奔雷中的所有屬性和配置文件中的相關(guān)屬性先綁定
* prefix = "com"綁定配置文件com層級下的屬性進行一一映射
* 只有是容器才能使用所以要添加注解@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:不存在給默認值}
com.age=${random.int}首先就是對age取隨機數(shù)然后對name獲取對象的數(shù)據(jù)
運行最后一個測試類
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 {
//如果測試類與啟動入口類包名不一致,必須加該注解屬性classes指定啟動入口類,否則無法啟動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("測試結(jié)果輸出:"+user);
}
}結(jié)果

因為com.cc是不存在的就回去:后面的默認值
如果com.cc存在就會取com.cc的值
測試如下
com.email=99@dfp.com
com.name=newDFP+++${com.email:不存在給默認值}
com.age=${random.int}這次的值不再是默認值了com.email是存在數(shù)據(jù)的

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis-Plus中公共字段的統(tǒng)一處理的實現(xiàn)
在開發(fā)中經(jīng)常遇到多個實體類有共同的屬性字段,這些字段屬于公共字段,本文主要介紹了MyBatis-Plus中公共字段的統(tǒng)一處理的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-08-08
Java創(chuàng)建可執(zhí)行的Jar文件的方法實踐
創(chuàng)建的可執(zhí)行Jar文件實際就是在原始Jar的清單文件中添加了Main-Class的配置,本文主要介紹了Java創(chuàng)建可執(zhí)行的Jar文件的方法實踐,感興趣的可以了解一下2023-12-12
Hadoop運行時遇到j(luò)ava.io.FileNotFoundException錯誤的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Hadoop運行時遇到j(luò)ava.io.FileNotFoundException錯誤展開,文中有非常詳細的解決方法,需要的朋友可以參考下2021-06-06
springcloud檢索中間件?ElasticSearch?分布式場景的使用
單機的elasticsearch做數(shù)據(jù)存儲,必然面臨兩個問題:海量數(shù)據(jù)存儲問題、單點故障問題,本文重點給大家介紹springcloud檢索中間件?ElasticSearch?分布式場景的運用,感興趣的朋友跟隨小編一起看看吧2023-10-10

