【问题标题】:Failed to configure a DataSource from command line从命令行配置数据源失败
【发布时间】:2019-06-11 07:27:01
【问题描述】:

我正在尝试从命令行更改数据源设置。我有一个默认设置的 application.properties。我想从命令行修改文件中的参数,但是当我传递 Datasource arguments 时,我收到一个错误。我阅读了外部化配置文档:“访问命令行属性 默认情况下,SpringApplication 会将任何命令行选项参数(即以 -- 开头的参数,例如 --server.port=9000)转换为属性并将其添加到 Spring 环境中。如前所述,命令行属性始终优先于其他属性源”。 我认为参数会覆盖 application.properties 中的默认设置,但我错过了一些相关步骤。

我尝试过在属性中不使用 spring.datasource.url 或占位符。在 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);


    }

}

【问题讨论】:

  • 你遇到了什么错误?
  • “配置数据源失败:未指定'url'属性,无法配置嵌入式数据源”。当我从命令行传递参数时。如果我没有传递任何东西,只在 application.properties 文件中保留默认信息,则应用程序可以正常工作。我无法理解的内容以及如何从命令行转到数据库配置信息并使其优先于 application.properties 文件中包含的内容
  • 优先级按照此处文档中的描述工作:docs.spring.io/spring-boot/docs/current/reference/html/… 您尚未指定如何在命令行中传递 URL,所以我认为这是问题所在。
  • 进入 STS,我在 Run Configuration - Arguments - Program Arguments 和我写的文本区域中传递 URL:--spring.datasource.url = jdbc:oracle:thin:@servername:port: DB11G。我阅读了文档并尝试了一些不同的外部配置,但无法理解正确配置的工作原理。
  • spring.datasource.url = jdbc:oracle:thin:@servername:port:DB11G。该声明与我在 application.properties 中写入的声明完全相同。如果我使用默认配置,我的应用运行良好。

标签: spring-boot spring-data-jpa


【解决方案1】:

将顶部注释从 @SpringBootConfiguration 更改为 @SpringBootApplication

@SpringBootApplication 实际上是@configuration@EnableAutoConfiguration@ComponentScan 的快捷方式。

https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html

@EnableAutoConfiguration 在根据包含的依赖项和在环境中找到的信息配置应用程序的幕后做了很多魔术。

【讨论】:

    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多