springboot如何根据参数传递的连接信息动态创建数据源呢?网上找的都是在配置文件中预先写死了的数据源、再动态切换数据源,我需要的是配置文件中只有一个主数据源,然后根据前台传递的参数动态连接指定的数据库
springboot如何根据参数传递的连接信息动态创建数据源呢?网上找的都是在配置文件中预先写死了的数据源、再动态切换数据源,我需要的是配置文件中只有一个主数据源,然后根据前台传递的参数动态连接指定的数据库
分两步
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
</dependency>
使用非常简单,官网 https://jcommander.org/ 也是浅显易懂。
@Configuration
public class MyConfiguration
{
...
// ApplicationArguments是命令行参数的包装类
@Autowired private ApplicationArguments applicationArguments;
@Bean("yourCommandLineParams")
public YourCommandLineParams generateYourCommandLineParams()
{
//命令行,以空格分隔
String[] args = applicationArguments.getSourceArgs;
//再将args转为jcommander对应的对象
//这里假设YourCommandLineParams是jcommander对应的对象的java类
}
}
其次要有一个标注了@Bean的方法
@ConditionalOnBean(name="yourCommandLineParams")
@Bean
public void generateDataSource(YourCommandLineParams yourCommandLineParams)
{
String url = yourCommandLineParams.getUrl();
String user = yourCommandLineParams.getUser();
String password = yourCommandLineParams.getPassword();
....
return new xxxDataSource(url, user, password);
}
4 回答1.7k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
4 回答2.3k 阅读
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答852 阅读✓ 已解决
AbstractRoutingDataSource,内部维护了一个map,指定key就能获取到对应的datasource,你可以将数据源维护到你的主库中,读取表中的数据源,这样你维护表数据,即维护动态数据源,前端也可只传入key就能拿到datasource,屏蔽掉敏感信息