Spring Boot DataSource 启动后定义

Ale*_*har 5 java spring datasource spring-boot

我有一个将使用 SQL Server 的 Spring Boot 应用程序。我希望能够在没有 application.properties 的情况下启动应用程序,并在启动后定义 url、用户名和密码(此时我将把所有内容写入 application.properties)。例如,我启动应用程序并从浏览器中使用这些参数填充表单。我尝试过使用 DataSourceBuilder 类,但发生得太早了。

DataSourceBuilder
            .create()
            .username(username)
            .password(password)
            .url("jdbc:sqlserver://" + computerName + "\\SQLEXPRESS;DatabaseName=" + dataBaseName)
            .driverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
            .build();
Run Code Online (Sandbox Code Playgroud)

我希望能够在应用程序启动后动态更改数据源。

van*_*gar -1

有多种方法可以解决您的问题。

\n\n

您可以使用@PostConstruct注解:\nJavax\xe2\x80\x99s @PostConstruct注解可用于注解应在bean\xe2\x80\x99s初始化后立即运行一次的方法

\n\n

也许你的代码看起来像这样:

\n\n
@Component\npublic class DatabaseService {\n    private DataSource dataSource;\n\n    @PostConstruct\n    public void init(){\n        this.dataSource = DataSourceBuilder\n        .create()\n        .username(username)\n        .password(password)\n        .url("jdbc:sqlserver://" + computerName + "\\\\SQLEXPRESS;DatabaseName=" + dataBaseName)\n        .driverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver")\n        .build();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

你还需要这个依赖:

\n\n
<dependency>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-data-jpa</artifactId>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里有更多方法:教程

\n