springboot配置文件读取

直接上代码:

package com.ly.learnSpringboot;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class App 
{
	public static void main(String[] args) {
//		ConfigurableApplicationContext context = SpringApplication.run(App2.class, args);
		SpringApplication application = new SpringApplication();
		Set<Object> source = new HashSet<Object>();
		source.add(App.class);
		application.setSources(source);
		ConfigurableApplicationContext context = application.run(args);
		Runnable run = context.getBean(Runnable.class);
		run.run();
		System.out.println(context.getBean(User.class));
		
		App2 a2 = context.getBean(App2.class);
		a2.console();
		System.out.println(context.getBean(MyConfig.class).createList());
		
		UserConfig uc = context.getBean(UserConfig.class);
		
		uc.show();
		
		System.out.println("name=" + context.getEnvironment().getProperty("name"));
		System.out.println("appName=" + context.getEnvironment().getProperty("app.name"));
		
		JdbcUse ju = context.getBean(JdbcUse.class);
		ju.show();
		
		
		DataSourceProperties dsp = context.getBean(DataSourceProperties.class);
		dsp.show();
		
		/**
		 * 通过MyEnvironmentPostProcessor
		 */
		System.out.println("testName=" + context.getEnvironment().getProperty("testName"));
		
		/**
		 * 通过application-test 注册
		 */
		System.out.println("testIp=" + context.getEnvironment().getProperty("test.ip"));
	}
	
	@Bean
	public Runnable createRunnable(){
		return () ->{ System.out.println("StringBoot is started");};
	}
}
package com.ly.learnSpringboot;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class App2 {

	@Autowired
	private  List<Object> list;
	
	public void console(){
		System.out.println(list);
	}
}
package com.ly.learnSpringboot;

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix="ds", locations="classpath:jdbc/jdbc.yml")
public class DataSourceProperties {
	
	private List<String> hosts = new ArrayList<>();
	private String url;
	private String driverClassName;
	private String userName;
	private String password;
	
	public void show(){
		System.out.println("=====================JDBC配置=========================");
		int i = 0;
		for(String host : hosts){
			i++;
			System.out.println("host" + i + ":" + host);
		}
		System.out.println("ds.jdbcUrl:" + url);
		System.out.println("ds.jdbcDriverClassName:" + driverClassName);
		System.out.println("ds.userName:" + userName);
		System.out.println("ds.password:" + password);
	}
	
	public List<String> getHosts() {
		return hosts;
	}
	public void setHosts(List<String> hosts) {
		this.hosts = hosts;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getDriverClassName() {
		return driverClassName;
	}
	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	
}
package com.ly.learnSpringboot;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;

@Configuration
//@PropertySource("classpath:jdbc/jdbc.properties")
//@PropertySource("classpath:jdbc/jdbc2.properties")
@PropertySources({@PropertySource("classpath:jdbc/jdbc.properties"),@PropertySource("classpath:jdbc/jdbc2.properties")})
public class JdbcConfig {

}
package com.ly.learnSpringboot;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class JdbcUse {
	
	@Value("${jdbc.url}")
	private String url;
	
	@Value("${jdbc.driverClassName}")
	private String driverClassName;
	
	@Value("${jdbc.userName}")
	private String userName;
	
	@Value("${jdbc.password}")
	private String password;
	
	
	public void show(){
		System.out.println("=====================JDBC配置=========================");
		System.out.println("jdbcUrl:" + url);
		System.out.println("jdbcDriverClassName:" + driverClassName);
		System.out.println("userName:" + userName);
		System.out.println("password:" + password);
	}
}
package com.ly.learnSpringboot;

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;

@SpringBootConfiguration
public class MyConfig {

	@Bean
	public List<Object> createList(){
		return new ArrayList<>();
	}
}
package com.ly.learnSpringboot;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.stereotype.Component;

/**
 * 注意该方法,需要先把类注册到META-INF/spring.factories中去
 * @author liuyo
 *
 */
@Component
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {

	@Override
	public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
		try(InputStream is = new FileInputStream("D:/tmp/test.properties")){
			Properties myProperty = new Properties();
			myProperty.load(is);
			PropertySource propertySource = new PropertiesPropertySource("my", myProperty);
			environment.getPropertySources().addLast(propertySource);
		}
		catch(IOException e){
			e.printStackTrace();
		}

	}

}
package com.ly.learnSpringboot;

import org.springframework.stereotype.Component;

@Component
public class User {

}
package com.ly.learnSpringboot;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * 配置属性的两种读取方式
 * @author liuyo
 * 配置文件的默认位置在classpath下的application.properties或者是application.yml。
 * 或者是config文件夹下的application.properties或者是application.yml 还有file:/ 或者是file:/config
 * 默认的配置文件的名字可以使用 --spring.config.name=配置文件的新名字来指定自己命名的配置文件。文件的
 * 扩展名可以省略
 * 默认的配置文件路径可以使用 --spring.config.location=  文件的路径和全名,可以有多个,  格式如:
 * classpath:/conf/app.yml, file:E:/cof/app2.yml
 */
@Component
public class UserConfig {
	
	@Value("${local.port}")
	private String port;
	
	/**
	 * 属性设置默认值, 如果在application中没有配置该属性,那么该属性的默认值就是9000
	 */
	@Value("${tomcat.port:9000}")
	private String tomcatPort;
	
	@Autowired
	private Environment enviroment;
	
	public void show(){
		System.out.println("localId=" + enviroment.getProperty("local.ip"));
		System.out.println("localPort=" + port);
		System.out.println("tomcatPort=" + tomcatPort);
	}
}

按顺序复制的:

jdbc.url = jdbc:mysql:///springboot
jdbc.driverClassName = com.mysql.jdbc.driver
ds:
  url: jdbc:mysql:///springboot
  driverClassName: com.mysql.jdbc.driver
  userName: liuyo
  password: 123456789
  hosts:
    - 192.168.1.1
    - 192.168.1.2
jdbc.userName = liuy
jdbc.password = 123456
org.springframework.boot.env.EnvironmentPostProcessor=com.ly.learnSpringboot.MyEnvironmentPostProcessor
test: 
  ip: 192.168.0.104
local: 
  ip: 192.168.1.1
  port: 8080
name: spring boot
app: 
  name: my ${name}
tomcat: 
  port: 9001
spring:
  profiles:
    active: test

猜你喜欢

转载自blog.csdn.net/kk6891/article/details/82055339