Пружинный ботинок 2 реактивный JDBC - PullRequest
0 голосов
/ 23 июня 2019

Я использую весеннюю загрузку 2.2 и пытаюсь настроить реактивный jdbc.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

Конфигурация источника данных,

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# Connection url for the database
spring.datasource.url = jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
# Username and password
spring.datasource.username = root
spring.datasource.password = root

spring.datasource.hikari.connection-test-query=select 1
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.idleTimeout=600000
spring.datasource.hikari.maxLifetime=1800000
spring.datasource.hikari.maximum-pool-size = 10

DataConfiguration

@Configuration
public class DataConfiguration {

    @Value("${spring.datasource.hikari.maximum-pool-size:100}")
    private int connectionPoolSize;

    @Bean
    public Scheduler jdbcScheduler() {
        return Schedulers.fromExecutor(Executors.newFixedThreadPool(connectionPoolSize));
    }

    @Bean
    public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) {
        return new TransactionTemplate(transactionManager);
    }
}

Я видел приведенный выше пример в Интернете и не уверен, зачем нам нужен bean-компонент TransactionTemplate.

DataManager,

@Component
public class UserDataManager {

    String sql = "SELECT ID FROM table WHERE ID=?";

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    @Qualifier("jdbcScheduler")
    Scheduler jdbcScheduler;

    public Mono<Optional<User>> findById(Long id) {
        return asyncCallable(() -> Optional.of(jdbcTemplate.queryForObject (sql, new Object[] { id }, new UserRowMapper())));
    }

    protected <S> Mono<S> asyncCallable(Callable<S> callable) {
        return Mono.fromCallable(callable).subscribeOn(Schedulers.parallel()).publishOn(jdbcScheduler);
    }

    protected <S> Flux<S> asyncIterable(Iterable<S> iterable) {
        return Flux.fromIterable(iterable).subscribeOn(Schedulers.parallel()).publishOn(jdbcScheduler);
    }

}

Просто хотел подтвердить, правильно ли это или что-то подстраивается? Нужен ли нам bean-компонент TransactionTemplate?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...