springboot(二):配置文件

1、基本配置

在src/java/resources下创建application.properties或者application.yml文件
springboot会自动读取配置内容
以application.yml为例:

server:
    port: 8082 #端口
	context-path: /szl  #访问前缀

yml格式的配置比properties要简洁,相同的部分不用重复书写。注意key的“:”后面要有一个空格。

根据以上配置,每次访问接口,url都要加上/szl前缀,并且端口改为8082

2、多环境配置

配置多环境配置文件,不同的环境可用不同的配置:
application-dev.yml:开发环境
application-test.yml:测试环境
application-prod.yml:生产环境
在默认配置application.yml文件中配置如下内容进行选择加载:

spring:
    profiles:
	active: dev #读取application-dev.yml的配置

配置在application.yml文件中内容对各种环境都起作用

3、读取配置属性

配置文件配置属性:

szl:
    name: szl

要在类中引用该属性,有以下两种方式:

1、@Value注解方式:

@Value("${szl.name}")
private String name;

在类中使用@Value注解,name的值为szl

2、通过工具类读取:

pom.xml文件引入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

创建工具类:ResourceUtil.java

@Configuration
@ConfigurationProperties(prefix="szl")
public class ResourceUtil {
    private String name;
    //getter and setter
}

在类中注入ResourceUtil,通过resourceUtil.getName可用获取到属性值:szl

@Autowired
private ResourceUtil resourceUtil;

resourceUtil.getName()//szl

还可以从指定的文件文件中读取:

在ResourceUtil上加上注解:@PropertySource(value="classpath:resource.properties")

3、使用工具类2:

PropertiesListener:初始化加载配置文件

	public class PropertiesListener implements ApplicationListener<ApplicationStartedEvent> {

    	    private String propertyFileName;
	
	    public PropertiesListener(String propertyFileName) {
	        this.propertyFileName = propertyFileName;
	    }
	
	    @Override
	    public void onApplicationEvent(ApplicationStartedEvent event) {
	        PropertiesUtils.loadAllProperties(propertyFileName);
	    }
	}

PropertiesUtils:加载配置文件内容

	public class PropertiesUtils {
	
		public static Map<String, String> propertiesMap = new HashMap<>();
	
	    private static void processProperties(Properties props) throws BeansException {
	        propertiesMap = new HashMap<String, String>();
	        for (Object key : props.keySet()) {
	            String keyStr = key.toString();
	            try {
	                // PropertiesLoaderUtils的默认编码是ISO-8859-1,在这里转码一下
	                propertiesMap.put(keyStr, new String(props.getProperty(keyStr).getBytes("ISO-8859-1"), "utf-8"));
	            } catch (UnsupportedEncodingException e) {
	                e.printStackTrace();
	            } catch (java.lang.Exception e) {
	                e.printStackTrace();
	            }
	        }
	    }
	
	    public static void loadAllProperties(String propertyFileName) {
	        try {
	            Properties properties = PropertiesLoaderUtils.loadAllProperties(propertyFileName);
	            processProperties(properties);
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    }
	
	    public static String getProperty(String name) {
	        return propertiesMap.get(name).toString();
	    }
	
	    public static Map<String, String> getAllProperty() {
	        return propertiesMap;
	    }
	}

Application修改为:

	public static void main(String[] args) {
	 	SpringApplication application = new SpringApplication(Application.class);
      	application.addListeners(new PropertiesListener("application.properties"));//需要读取的配置文件
      	application.run(args);
	}

Constant:常量类,与配置文件属性对应:


	public interface Constant {
		interface Szl {
			String SZL_NAME = "szl.name";
		}
	}

使用:
 

 String name = PropertiesUtils.getProperty(Constant.Szl.SZL_NAME);

猜你喜欢

转载自blog.csdn.net/ynzz123/article/details/81005887
今日推荐