我有一个非常复杂的Spring Boot应用程序(包括Spring MVC和Security),其中包括数据库配置(url,用户名和密码)。要求是让最终用户在应用程序本身的帮助下配置数据库,如下所示:
显而易见的问题是,在知道配置之前,我无法创建需要DataSource
的任何需要数据库配置的bean。
在执行第一个配置步骤之前,有没有办法推迟大多数应用程序bean的初始化?
- 更新 -
几个应用程序的bean在其@PostConsutrct
方法中从DB初始化它们的状态。所以我要么真的要延迟他们的创建,要么在提供配置后有一个方法(可能)刷新应用程序上下文中的所有bean。
答案 0 :(得分:1)
我建议您考虑使用另一个模块/程序或简单的脚本来提供所有详细信息,例如数据库等,将此信息存储到您的application.properties文件中(可能有用的是外部化配置Spring boot external configuration )然后使用已有的数据源信息启动主程序。这可能是一种更简单的方法。
答案 1 :(得分:0)
正如您可能预期的那样,在创建Spring Application Context时需要#!/bin/bash
while IFS= read -r -d '' name && IFS= read -r content; do
printf 'app="%s" | input="%s"\n' "$name" "$content"
done < <(grep -r --null --include "inputs.conf" "\[")
的实例。
我建议你继承Spring javax.sql.DataSource
并使用空方法覆盖org.springframework.jdbc.datasource.DelegatingDataSource
(如果你还没有提供数据源,则默认实现会抛出错误)。当用户提供您需要选择数据库的详细信息时,您可以稍后将最终数据源注入afterPropertiesSet
。