Spring 使用数据源 (YML) 的配置属性

Spring Configuration Properties with DataSource (YML)

我需要在我的 jar 之外使用配置属性。 为此,我使用 class 来配置:

@Data
@Configuration
@PropertySource(value={"file:///C:/main.properties"})
public class YAMLConfig {

    @Bean
    @ConfigurationProperties(prefix = "datasource.db-prod")
    public DataSource personDataSource() {
        return DataSourceBuilder.create().build();
    }

    private String name;
    private String environment;
    private String datasource;
    private List<String> servers = new ArrayList<>();

    // standard getters and setters

我的 main.properties 在我的程序中使用时完美运行。但是我想要这个在外面,因为我想在我想要的时候改变。

我的Springclass:

@SpringBootApplication
@EnableEncryptableProperties
public class PsuInfoToolApplication {

    @Autowired
    private static YAMLConfig config;

    public static void main(String[] args) {
        SpringApplication.run(PsuInfoToolApplication.class, args);

    }

但是不行,好像文件没有配置dataSource: java.sql.SQLException: url 不能为空

我该怎么办?我想在我的 jar 之外做一个配置文件,并使用 DataSource 对象直接配置我的数据库。

Load the file from the classpath

您可以从类路径加载 属性 文件,以便在运行时自动获取该文件。

示例代码:

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

public class MyPropWithinClasspath {

    private Properties prop = null;

    public MyPropWithinClasspath(){

        InputStream is = null;
        try {
            this.prop = new Properties();
            is = this.getClass().getResourceAsStream("/sample.properties");
            prop.load(is);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getPropertyValue(String key){
        return this.prop.getProperty(key);
    }

    public static void main(String a[]){

        MyPropWithinClasspath mpc = new MyPropWithinClasspath();
        System.out.println("db.host: "+mpc.getPropertyValue("db.host"));
        System.out.println("db.user: "+mpc.getPropertyValue("db.user"));
        System.out.println("db.password: "+mpc.getPropertyValue("db.password"));
    }
}

Load the file from environment variable

String extDir = System.getenv(EXTERNAL_DIR);

您可以在external.dir中指定文件的路径。所以java会自动识别变量。这样您就可以使用环境变量的路径并加载文件