java - 启动后定义的Spring Boot DataSource

标签 java spring spring-boot datasource

我有一个将使用 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();

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

最佳答案

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

您可以使用 @PostConstruct 注解:
Javax 的@PostConstruct 注解可用于注解应该在 bean 初始化后立即运行一次的方法

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

@Component
public class DatabaseService {
    private DataSource dataSource;

    @PostConstruct
    public void init(){
        this.dataSource = DataSourceBuilder
        .create()
        .username(username)
        .password(password)
        .url("jdbc:sqlserver://" + computerName + "\\SQLEXPRESS;DatabaseName=" + dataBaseName)
        .driverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
        .build();
    }
}

你还需要这个依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

这里有更多方法:tutorial

关于java - 启动后定义的Spring Boot DataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52736061/

相关文章:

java - 为什么 Spring 对注册的错误页面执行 POST 请求?

java - 使用 Camel 调用 REST URL

java - 如何从 Java 枚举所有启用的 NIC 卡的 IP 地址?

Spring Boot - 测试 - bean 的拆卸

java - 无法使用 @Valid 在 Spring Boot 中验证请求正文

java - 现有数据库上的飞路迁移导致 "wrong column type encountered in column"

spring-boot - 使用在 META-INF/spring.factories 中找到的 Gradle-No 自动配置类

Java+Eclipse : how do you debug a java program that is receiving piped/redirected stdin?

java - 矩阵上的递归移动

java - JUnit 测试之间的相同 hibernate session 导致问题