Java 如何在Springboot中配置对Redis的@Transactional支持?

Java 如何在Springboot中配置对Redis的@Transactional支持?,java,spring-boot,redis,spring-data-redis,jedis,Java,Spring Boot,Redis,Spring Data Redis,Jedis,我目前正在从事一个项目,该项目主要使用Redis进行缓存,我使用Oracle作为主数据库,使用springdatajpa处理项目中的数据库层。我需要知道如何使用@Transactional annotation support来处理Redis中的事务。我已经参考了很多关于这个场景的教程和文档。在大多数教程中,始终有相同的源代码集可用。但是,我仍然没有一个关于实施的清晰想法。因为在我的应用程序中已经有一个可用的数据源,我通过属性文件进行了配置。(Oracle数据库)所以我怀疑数据源bean的实现。

我目前正在从事一个项目,该项目主要使用Redis进行缓存,我使用Oracle作为主数据库,使用springdatajpa处理项目中的数据库层。我需要知道如何使用@Transactional annotation support来处理Redis中的事务。我已经参考了很多关于这个场景的教程和文档。在大多数教程中,始终有相同的源代码集可用。但是,我仍然没有一个关于实施的清晰想法。因为在我的应用程序中已经有一个可用的数据源,我通过属性文件进行了配置。(Oracle数据库)所以我怀疑数据源bean的实现。我也无法理解transactionManager bean的用法。我应该如何正确地实现这一点请给出详细的解释

我在网上找到的源代码

@Configuration
@EnableTransactionManagement // 1
public class RedisConfig {

    @Bean
    public StringRedisTemplate stringRedisTemplate(LettuceConnectionFactory redisConnectionFactory) {
        // Configure redisTemplate
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
        / / Open transaction support
        stringRedisTemplate.setEnableTransactionSupport(true); // 2
        return stringRedisTemplate;
    }

    @Bean
    public PlatformTransactionManager transactionManager() throws SQLException {
        return new DataSourceTransactionManager(dataSource()); // 3
    }

    @Bean
    public DataSource dataSource() throws SQLException {
        // ...
    }
}
更新: apppication.properties文件中当前配置的数据源属性

# OracleDB connection settings
spring.datasource.url=jdbc:oracle:thin:@192.168.20.108:1521:orcl
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

# HikariCP settings
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=20
spring.datasource.hikari.idleTimeout=30000
spring.datasource.hikari.maxLifetime=2000000
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.poolName=redis-sample-pool


有两种方法可以配置数据源

  • 使用配置文件

    spring.datasource.url= jdbc:oracle:thin:@//localhost
    spring.datasource.username=test
    spring.datasource.password=test1234
    spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
    #hibernate config dialect for JPA, choose dialect based on the db version
    spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
    
在DataSourceBuilder的帮助下,您可以通过读取这些属性来手动创建这些属性

@Bean
public  DataSource dataSource(){
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName("oracle.jdbc.OracleDriver");
        dataSourceBuilder.url("jdbc:h2:mem:test");
        dataSourceBuilder.username("test");
        dataSourceBuilder.password("test1234");
        return dataSourceBuilder.build();
}

这就是你所需要做的。。你觉得这段代码有什么问题吗?@sonus21问题是我对数据源bean的实现没有任何清晰的概念。正如我提到的,这是我从互联网上得到的一个代码。这不是我的代码。在这里您可以看到DataSourceBean实现是空的。我应该在该方法中实现什么。@Sonous21我已经在application.properties文件中配置了这些属性。请参阅我的原始帖子的更新部分。我想问的是oracle配置如何涉及到这个redis配置。我的意思是,在这种情况下,我可以忽略dataSource bean的定义吗,因为正如我上面提到的,我已经在application.properties文件中实现了它。因此,我也可以忽略transactionManger bean的实现。简而言之,我需要知道的是,我可以忽略transactionManger bean和dataSource bean的实现。是的,如果您添加了
spring boot starter jdbc
依赖项,那么您可以忽略PlatformTransactionManager的实现。初学者JDBC将为您创建这个bean。@sonous21非常感谢您的承诺。最后,我需要澄清的是,在实现对事务注释的支持以处理Redis中的事务时,根据我的应用程序,我需要做的是通过忽略transactionManger bean和dataSource bean来实现上述源代码。我说的对吗?看来您在RDBMS和Redis中混合了事务支持。Redis事务是不同的,NoSQL db-like Redis支持不同用途的事务。