Я пытаюсь получить свойства, загруженные из файла .yml, автоматически подключая переменную окружения, но я получаю исключение нулевого указателя:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/example/AppConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException
Я хочу программно создать бин DataSource, покахранение данных (имя пользователя, пароль, хост и т. д.) в файле конфигурации. Это мои настройки на данный момент:
@SpringBootApplication
@ImportResource({"classpath:controllers.xml"})
public class WebApplication{
public static void main(String[] args){
SpringApplication.run(WebApplication.class, args);
}
}
server:
port: 8080
database:
host: localhost
instance: db_instance
port: 3036
user: root
password: passkey
@Configuration
public class AppConfig {
@Autowired
private Environment environment;
@Bean
public DataSource dataSource() {
String url = "jdbc:mysql://" +
environment.getProperty("database.host") +
":" + environment.getProperty("database.port") +
"/" + environment.getProperty("database.instance") +
"?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true";
return DataSourceBuilder.create()
.driverClassName("com.mysql.jdbc.Driver")
.url(url)
.username(environment.getProperty("database.user"))
.password(environment.getProperty("database.password"))
.build();
}
}
Я не неравнодушен ни к формату файла .yml, ни к использованию переменной Environment. Если есть другой / лучший способ получения данных из файла .yml (или другого формата), я готов попробовать.