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会自动识别变量。这样您就可以使用环境变量的路径并加载文件
我需要在我的 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会自动识别变量。这样您就可以使用环境变量的路径并加载文件