我正在尝试从命令行更改数据源设置。我有一个具有默认设置的application.properties。我想从命令行修改文件中的参数,但是当我传递数据源参数时,出现错误。我阅读了《外部化配置》文档:“访问命令行属性 默认情况下,SpringApplication将所有命令行选项参数(即以-开头的参数,例如--server.port = 9000)转换为属性,并将其添加到Spring Environment中。如前所述,命令行属性始终优先于其他属性源”。 我以为参数会将默认设置覆盖到application.properties中,但是我错过了一些有关此的步骤。
我尝试过在属性中没有spring.datasource.url或Placeholders。在application.properties下面。
spring.datasource.url = jdbc:oracle:thin:@servername:port:DB11G
#spring.datasource.url = ${spring.datasource.url}
spring.datasource.driver.class=oracle.jdbc.driver.OracleDriver
spring.datasource.username = dbUser
spring.datasource.password = password
我的具有数据源默认设置的应用程序运行良好。
这是我的代码:
spring.datasource.url = ${db.url}
spring.datasource.driver.class=oracle.jdbc.driver.OracleDriver
spring.datasource.username = dbUser
spring.datasource.password = dbPassword
主班
@SpringBootConfiguration
public class IdsFeApplication implements ApplicationRunner{
private static final String FEC_CODEX = "A";
@Autowired
private static ConfigInfoDB infoDb;
@Autowired
private Login fec;
public static void main(String[] args) throws InterruptedException {
SpringApplication bootApp = new SpringApplication(IdsFeApplication.class);
bootApp.setBannerMode(Banner.Mode.OFF);
bootApp.setLogStartupInfo(false);
ConfigurableApplicationContext context = bootApp.run(args);
ConfigInfoDB db=context.getBean(ConfigInfoDB.class);
db.dbInfo();
}
@Override
public void run(ApplicationArguments args) throws Exception {
// TODO Auto-generated method stub
fec.token(FEC_CODEX);
}
}
答案 0 :(得分:0)
将顶部注释从@SpringBootConfiguration
更改为@SpringBootApplication
。
@SpringBootApplication
实际上是@configuration
,@EnableAutoConfiguration
和@ComponentScan
的快捷方式。
@EnableAutoConfiguration
根据所包含的依赖项以及在环境中找到的信息,在配置应用程序的幕后发挥了很多魔力。