SpringBoot获取配置文件信息

默认application.properties中的信息:

local.ip=192.168.238.133
local.port=8080

一、Environment(一)

直接在SpringBoot启动类main方法中:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        String port = context.getEnvironment().getProperty("local.port");
        System.out.println(port);
    }

}

二、Environment(二)

在SpringBoot启动类App,下级新建ConfigurationFile:

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

@Component
public class ConfigurationFile {

    @Autowired
    private Environment environment;

    public void getConfigInfo (){
        String ip = environment.getProperty("local.ip");
        System.out.println("ip = " + ip);
    }

}

App.java

import com.xh.config.ConfigurationFile;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        ConfigurationFile configurationFile = context.getBean(ConfigurationFile.class);
        configurationFile.getConfigInfo();
    }

}

三、使用@value注解

在SpringBoot扫描包下新建ServerInfo.java:

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

@Component
public class ServerInfo {

    @Value("${local.ip}")
    private String ip;

    @Value("${local.port}")
    private Integer port;

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    @Override
    public String toString() {
        return "ServerInfo{" +
                "ip='" + ip + '\'' +
                ", port=" + port +
                '}';
    }
}

App.java

import com.xh.config.ServerInfo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        ServerInfo serverInfo = context.getBean(ServerInfo.class);
        System.out.println(serverInfo);
    }

}

注意: @Value(“${local.port}”)中,local.port必须在加载的配置文件中,可以为空,不然会出现类似于Could not resolve placeholder 'local.ipq' in value "${local.ipq}" 的错误。

如果没有配置项,可以给默认值,例:@Value("${local.ipq:192.168.238.145}") , 而我的配置文件中没有local.ipq项也不会报错。

四、变量的引用

配置文件中引用配置文件,例在application.properties中:

local.ip=192.168.238.133
local.port=8080
my.address= ${local.ip}:${local.port}

得到的my.address得值就是:192.168.238.133:8080

五、获取集合、数组

配置方式:name[index] = value
application.properties中配置:

ds.hosts[0]=192.168.238.130
ds.hosts[1]=192.168.238.131
ds.hosts[2]=192.168.238.132

ds.ports[0]=8080
ds.ports[1]=8081
ds.ports[2]=8082

新建ClusterConfig.java :

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

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

@Component
@ConfigurationProperties("ds") // ds对应配置文件ds.hosts[0]等中的ds前缀
public class ClusterConfig {

    // 变量名对应配置文件ds.hosts[0]等中的 hosts
    private List<String> hosts = new ArrayList<>();

    // 变量名对应配置文件ds.ports[0]等中的 ports
    private Integer[] ports;

    public List<String> getHosts() {
        return hosts;
    }

    public void setHosts(List<String> hosts) {
        this.hosts = hosts;
    }

    public Integer[] getPorts() {
        return ports;
    }

    public void setPorts(Integer[] ports) {
        this.ports = ports;
    }

    @Override
    public String toString() {
        return "ClusterConfig{" +
                "hosts=" + hosts +
                ", ports=" + Arrays.toString(ports) +
                '}';
    }
}

App.java

import com.xh.config.ClusterConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        ClusterConfig clusterConfig = context.getBean(ClusterConfig.class);
        System.out.println(clusterConfig);
    }

}

六、SpringBoot设置属性默认值

application.properties:

my.username=admin
my.password=123456

方法一:直接@Value("${my.username:root}")

方法二:

App.java中

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        // 如果没有该配置项,则返回defaultValue,如果有该配置项,则返回对应值
        String myUsername = context.getEnvironment().getProperty("my.username","root");
        System.out.println("myUsername = " + myUsername);
        String mysqlUsername = context.getEnvironment().getProperty("mysql.username","root");
        System.out.println("mysqlUsername = " + mysqlUsername);
    }

}

控制台打印结果:

myUsername = admin
mysqlUsername = root

方法三:SpringApplication、map设定多个值

在App.java中:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import java.util.HashMap;
import java.util.Map;

@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(App.class);
        Map<String, Object> defaultMap = new HashMap<String, Object>();
        // 如果没有该配置项,则返回设定,如果有该配置项,则返回对应值
        defaultMap.put("my.username", "root");
        defaultMap.put("my.password", "111111");
        defaultMap.put("my.url", "jdbc:mysql://127.0.0.1:3306/test");
        defaultMap.put("my.username", "com.mysql.jdbc.Driver");
        // 还可以是Properties对象
        application.setDefaultProperties(defaultMap);
        ConfigurableApplicationContext context = application.run(args);
        System.out.println("my.username = " + context.getEnvironment().getProperty("my.username"));
        System.out.println("my.password = " + context.getEnvironment().getProperty("my.password"));
        System.out.println("my.url = " + context.getEnvironment().getProperty("my.url"));
        System.out.println("my.username = " + context.getEnvironment().getProperty("my.username"));
    }

}

控制台打印结果:

my.username = admin
my.password = 123456
my.url = jdbc:mysql://127.0.0.1:3306/test
my.username = admin

猜你喜欢

转载自blog.csdn.net/qq_37502106/article/details/80771017