我知道如何使2个数据源,但哪里是最好的地方,以处理逻辑什么时候它将使用哪一个。逻辑需要这样运行:
在Spring服务中处理这个问题是最好的/可能的吗?我应该有一个不同的服务来处理这个逻辑,而我的其他服务使用这个逻辑吗?不连接到DB的“Spring方式”而使用“普通的旧java方式”会更好吗?
package com.helloworld.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import oracle.jdbc.pool.OracleDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.sql.SQLException;
@Configuration
public class DatasourcesConfig {
@Primary
@Bean(name = "primaryDataSource")
DataSource primaryDataSource() throws SQLException {
OracleDataSource dataSource = new OracleDataSource();
dataSource.setUser("user");
dataSource.setPassword("pass");
dataSource.setURL("jdbc:oracle:thin:@(...primary connection...)");
return dataSource;
}
@Bean(name = "secondaryDataSource")
DataSource secondaryDataSource() throws SQLException {
OracleDataSource dataSource = new OracleDataSource();
dataSource.setUser("user");
dataSource.setPassword("pass");
dataSource.setURL("jdbc:oracle:thin:@(...secondary connection...)");
return dataSource;
}
@Bean(name = "jdbcPrimary")
@Autowired
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource ds) {
return new JdbcTemplate(ds);
}
@Bean(name = "jdbcSecondary")
@Autowired
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource ds) {
return new JdbcTemplate(ds);
}
}
package com.helloworld.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class ExampleService {
@Autowired
@Qualifier("jdbcPrimary")
private JdbcTemplate jdbcTemplatePrimary;
@Autowired
@Qualifier("jdbcSecondary")
private JdbcTemplate jdbcTemplateSecondary;
public SampleDTO getData(String a, String b){
final String sql = "select a, b from TABLE_A where a=? and b=?";
// Only checking Primary
return jdbcTemplatePrimary.queryForObject(sql,
new Object[]{a,b},
new SampleRowMapper());
// Is this the best place to catch exceptions and connect to Secondary?
}
}
我能够使用dzone的本文实现这种机制:https://dzone.com/articles/using-HA-jdbc-with-spring-boot使用这里的enter link description
HA-JDBC是非常可配置的,并且有几种不同的故障转移策略。
在我们的例子中,我们设置到两个不同数据库的连接,我们的主数据库备份到辅助数据库,因此可能不是当前数据库。
问题内容: 在JBoss数据源中,如何为我想要的数据库故障转移提供多个连接字符串。 将有两个具有相同表的Mysql db,即DB1和DB2。我想将数据插入DB1,如果DB1关闭,那么我需要将其插入DB2。在插入DB2期间,如果DB1出现了,我需要将其余数据插入DB1中。如何在JBoss中配置它? 问题答案: 这将适用于jboss映射
我正在尝试用6台机器实现一个Redis集群。我有一个由六台机器组成的流浪集群: 运行redis服务器 我编辑了上述所有服务器的/etc/redis/redis.conf文件,添加了这个 然后我在六台机器中的一台上运行了这个程序; Redis集群已启动并运行。我通过在一台机器上设置值手动检查它显示在其他机器上。 我的问题是,当我关闭或停止任何一台主机上的redis server时,整个集群都会停止运
我有两个ActiveMQ Artemis服务器(server1和server2)。两者都是主人,在这种情况下没有奴隶。Artemis支持主对主故障转移吗?如果是,任何一个可以提供代理配置。目前,我已经在两个服务器的文件中定义了以下配置。 此外,如果可能的话,您是否可以提供示例客户端代码以测试主到主故障转移场景?
我试图设置一个简单的,并将其配置为将主服务器故障转移到从服务器。 我设置了4个VM(使用),每个VM上都安装了redis。我有一个主机器和两个奴隶。最后一台机器是哨兵。 主服务器和从服务器都有默认配置,只是我将绑定地址更改为,而从服务器有行。 在哨兵中,我遵循了基本教程,并放入了以下设置: 我做错了什么?
我们使用MQ作为传递消息的主要路径。这是我们的制度运作不可或缺的一部分。消息代理有时会失败,所有相关的队列也会随之失败。在camel中,有没有一种方法可以启动故障切换,并在其启动时恢复到主故障切换?
我有3个redis Sentinel的盒子设置: 在我的主人死后,哨兵进行了故障转移到R2。我将M1重新联机(清除了一些磁盘空间),现在M1还活着,但是是R2的奴隶。是否有一种自动的(或半自动的)方法,使M1再次成为主,R2再次成为M1和我的流量的从属,使用M1作为主redis实例?