Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置多个数据库实例?_Java_Dropwizard - Fatal编程技术网

Java 如何配置多个数据库实例?

Java 如何配置多个数据库实例?,java,dropwizard,Java,Dropwizard,我已经讨论了关于这个问题的现有问题,但仍然不满足于核心问题 要添加多个数据库配置,以下是我目前获得的信息- 1更新config.yml文件- database1: driverClass: com.mysql.jdbc.Driver user: user1 password: user!23 url: jdbc:mysql://url.to.connect:3306/db1 properties: charSet: UTF-8 maxWaitForConnection:

我已经讨论了关于这个问题的现有问题,但仍然不满足于核心问题

要添加多个数据库配置,以下是我目前获得的信息-

1更新config.yml文件-

database1:
  driverClass: com.mysql.jdbc.Driver
  user: user1
  password: user!23
  url: jdbc:mysql://url.to.connect:3306/db1
  properties: charSet: UTF-8
  maxWaitForConnection: 1s
  validationQuery: "/* MyService Health Check */ SELECT 1"
  minSize: 8
  maxSize: 32
  checkConnectionWhileIdle: false
  checkConnectionHealthWhenIdleFor: 10s
  closeConnectionIfIdleFor: 1 minute

database2:
  driverClass: com.mysql.jdbc.Driver
  user: user2
  password: user!23
  url: jdbc:mysql://url.to.connect:3306/db2
  properties: charSet: UTF-8
  maxWaitForConnection: 1s
  validationQuery: "/* MyService Health Check */ SELECT 1"
  minSize: 8
  maxSize: 32
  checkConnectionWhileIdle: false
  checkConnectionHealthWhenIdleFor: 10s
  closeConnectionIfIdleFor: 1 minute
2将更改添加到java配置文件

public class DropWizardConfiguration extends Configuration{

    @Valid
    @NotNull
    @JsonProperty
    private DatabaseConfiguration database1 = new DatabaseConfiguration();

    @Valid
    @NotNull
    @JsonProperty
    private DatabaseConfiguration database2 = new DatabaseConfiguration();

    public DatabaseConfiguration getDatabaseConfiguration1()
    {       
        return database1;
        }

        public DatabaseConfiguration getDatabaseConfiguration2()
    {       
        return database2;
        }
}
3在这一步中,我应该更新DropWizard服务来处理相应的数据库实例

public class DropWizardService extends Service<DropWizardConfiguration>{
    private final HibernateBundle<DropWizardConfiguration> hibernate = new HibernateBundle<DropWizardConfiguration>(Game.class) {

        // @Override
        public DatabaseConfiguration getDatabaseConfiguration(DropWizardConfiguration configuration){
            return configuration.getDatabaseConfiguration();
        }
    };

    @Override
    public void initialize(Bootstrap<DropWizardConfiguration> bootstrap) {  
        bootstrap.addBundle(hibernate);
    }

    public void run() throws Exception{
        this.run(new String[]{"server", "./config.yml"});
    }

    @Override
    public void run(DropWizardConfiguration configuration, Environment environment) throws Exception {
        SessionFactory factory = hibernate.getSessionFactory();     
        environment.addResource(new MyResource(factory));   
    }   
}
但这就是我要进入黑盒的地方,我不确定要更改什么配置或如何更改


感谢您的支持。

我最近不得不做一些类似的事情,我的做法是使用BeanDefinitionRegistryPostProcessor。我使用了jdbcTemplates,但它也可以转移到hibernate会话。这样做是因为我可以添加任意数量的数据库,然后创建bean。然后在上下文文件中添加bean

我所做的是在配置中

@Valid
@NotNull
@JsonProperty("database")
private Collection<DataSourceConfig> databases;

public Collection<DataSourceConfig> getDatabase() {
    return databases;
}
这是我的类中实现BeanDefinitionPostProcessor的方法

public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {

    /**
     * Builds JdbcTemplates for beans
     */
    Map<String,String> jdbcTemplateBeanNames = Maps.newHashMap();
    for (DataSourceConfig dsc : configuration.getDatabase()) {
        AbstractBeanDefinition jdbcTemplateDefinition = BeanDefinitionBuilder.rootBeanDefinition("org.springframework.jdbc.core.JdbcTemplate")
                .addPropertyValue("dataSource",
                        BeanDefinitionBuilder.genericBeanDefinition(DriverManagerDataSource.class)
                            .addPropertyValue("driverClassName", dsc.getDriverClassName())
                            .addPropertyValue("url", dsc.getUrl())
                            .addPropertyValue("username", dsc.getUsername())
                            .addPropertyValue("password", dsc.getPassword())
                            .getBeanDefinition()
                )
                .getBeanDefinition();
        String name = BeanDefinitionReaderUtils.registerWithGeneratedName(jdbcTemplateDefinition, registry);
        jdbcTemplateBeanNames.put(dsc.getName(), name);

    }
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {

    /**
     * Builds JdbcTemplates for beans
     */
    Map<String,String> jdbcTemplateBeanNames = Maps.newHashMap();
    for (DataSourceConfig dsc : configuration.getDatabase()) {
        AbstractBeanDefinition jdbcTemplateDefinition = BeanDefinitionBuilder.rootBeanDefinition("org.springframework.jdbc.core.JdbcTemplate")
                .addPropertyValue("dataSource",
                        BeanDefinitionBuilder.genericBeanDefinition(DriverManagerDataSource.class)
                            .addPropertyValue("driverClassName", dsc.getDriverClassName())
                            .addPropertyValue("url", dsc.getUrl())
                            .addPropertyValue("username", dsc.getUsername())
                            .addPropertyValue("password", dsc.getPassword())
                            .getBeanDefinition()
                )
                .getBeanDefinition();
        String name = BeanDefinitionReaderUtils.registerWithGeneratedName(jdbcTemplateDefinition, registry);
        jdbcTemplateBeanNames.put(dsc.getName(), name);

    }