Свойства конфигурации Spring с источником данных (YML) - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно использовать свойства конфигурации вне моей фляги.Для этого я использую класс для настройки:

@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 отлично работают, когда я использую внутри своей программы.Но я хочу, чтобы это было снаружи, потому что я хочу изменить, когда захочу.

Мой класс Spring:

@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.

1 Ответ

0 голосов
/ 28 сентября 2018

Загрузка файла из пути к классам

Вы можете загрузить файл свойств из пути к классам, так что во время выполнения файл будет автоматически загружаться.

Пример кода:

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"));
    }
}

ИЛИ

Загрузить файл из переменной среды

String extDir = System.getenv(EXTERNAL_DIR);

Вы можете указать путь к файлу в external.dir.Таким образом, Java автоматически распознает переменную.Так что вы можете использовать путь из переменной env и загрузить файл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...