package com.nisum.Employeeinfo.config; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import io.r2dbc.spi.ConnectionFactories; import io.r2dbc.spi.ConnectionFactory; import io.r2dbc.spi.ConnectionFactoryOptions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.r2dbc.core.DatabaseClient; import javax.sql.DataSource; import java.sql.Driver; import static io.r2dbc.spi.ConnectionFactoryOptions.*; @Configuration public class DataSourceConfiguration { private final Logger log = LoggerFactory.getLogger(DataSourceConfiguration.class); public static final String POOL = "pool"; public static final String MYSQL = "mysql"; @Bean public DataSource createDataSource(DataSourceProperties dataSourceProperties) { HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver"); hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/employeedb"); hikariConfig.setUsername("root"); hikariConfig.setPassword("root"); return new HikariDataSource(hikariConfig); } @Bean public DataSourceTransactionManager createTransactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean public ConnectionFactory createConnectionFactory(DataSourceProperties dataSourceProperties) { return ConnectionFactories.get(ConnectionFactoryOptions.builder() .option(DRIVER, POOL) .option(PROTOCOL, MYSQL) .option(HOST, dataSourceProperties.getHostName()) .option(PORT, dataSourceProperties.getPort()) .option(USER, dataSourceProperties.getUserName()) .option(PASSWORD, dataSourceProperties.getPassword()) .option(DATABASE, dataSourceProperties.getDatabaseName()) .build()); } @Bean public DatabaseClient createDataBaseClient(ConnectionFactory connectionFactory) { return DatabaseClient.create(connectionFactory); } }