Spring Boot обеспечивает очень хорошую поддержку для создания источника данных для базы данных. Нам не нужно писать дополнительный код для создания источника данных в Spring Boot. Достаточно просто добавить зависимости и выполнить детали конфигурации, чтобы создать источник данных и подключить базу данных.
В этой главе мы будем использовать подключение драйвера JDBC Spring Boot для подключения к базе данных.
Во-первых, нам нужно добавить зависимость JDBC Spring Boot Starter в наш файл конфигурации сборки.
Пользователи Maven могут добавить следующие зависимости в файл pom.xml.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
Пользователи Gradle могут добавить следующие зависимости в файл build.gradle.
compile('org.springframework.boot:spring-boot-starter-jdbc')
Подключиться к базе данных H2
Чтобы подключить базу данных H2, нам нужно добавить зависимость базы данных H2 в наш файл конфигурации сборки.
Для пользователей Maven добавьте приведенную ниже зависимость в ваш файл pom.xml.
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency>
Для пользователей Gradle добавьте приведенную ниже зависимость в свой файл build.gradle.
compile('com.h2database:h2')
Нам нужно создать файл schema.sql и файл data.sql в каталоге classpath src / main / resources для подключения к базе данных H2.
Файл schema.sql приведен ниже.
CREATE TABLE PRODUCT (ID INT PRIMARY KEY, PRODUCT_NAME VARCHAR(25));
Файл data.sql приведен ниже.
INSERT INTO PRODUCT (ID,PRODUCT_NAME) VALUES (1,'Honey'); INSERT INTO PRODUCT (ID,PRODUCT_NAME) VALUES (2,'Almond');
Подключи MySQL
Чтобы подключить базу данных MySQL, нам нужно добавить зависимость MySQL в наш файл конфигурации сборки.
Для пользователей Maven добавьте следующую зависимость в ваш файл pom.xml.
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
Для пользователей Gradle добавьте следующую зависимость в свой файл build.gradle.
compile('mysql:mysql-connector-java')
Теперь создайте базу данных и таблицы в MySQL, как показано на рисунке —
Для пользователей файла свойств добавьте следующие свойства в файл application.properties.
spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/PRODUCTSERVICE?autoreconnect = true spring.datasource.username = root spring.datasource.password = root spring.datasource.testOnBorrow = true spring.datasource.testWhileIdle = true spring.datasource.timeBetweenEvictionRunsMillis = 60000 spring.datasource.minEvictableIdleTimeMillis = 30000 spring.datasource.validationQuery = SELECT 1 spring.datasource.max-active = 15 spring.datasource.max-idle = 10 spring.datasource.max-wait = 8000
Для пользователей YAML добавьте следующие свойства в файл application.yml.
spring:
   datasource: 
      driverClassName: com.mysql.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/PRODUCTSERVICE?autoreconnect=true"
      username: "root"
      password: "root"
      testOnBorrow: true
      testWhileIdle: true
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 30000
      validationQuery: SELECT 1
      max-active: 15
      max-idle: 10
      max-wait: 8000
Подключите Redis
Redis — это база данных с открытым исходным кодом, используемая для хранения структуры данных в памяти. Чтобы подключить базу данных Redis в приложении Spring Boot, нам нужно добавить зависимость Redis в наш файл конфигурации сборки.
Пользователи Maven должны добавить следующую зависимость в ваш файл pom.xml.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
Пользователи Gradle должны добавить следующую зависимость в ваш файл build.gradle.
compile('org.springframework.boot:spring-boot-starter-data-redis')
Для подключения Redis нам нужно использовать RedisTemplate. Для RedisTemplate нам нужно предоставить детали JedisConnectionFactory.
@Bean
JedisConnectionFactory jedisConnectionFactory() {
   JedisConnectionFactory jedisConFactory = new JedisConnectionFactory();
   jedisConFactory.setHostName("localhost");
   jedisConFactory.setPort(6000);
   jedisConFactory.setUsePool(true);
   return jedisConFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
   RedisTemplate<String, Object> template = new RedisTemplate<>();
   template.setConnectionFactory(jedisConnectionFactory());
   template.setKeySerializer(new StringRedisSerializer());
   template.setHashKeySerializer(new StringRedisSerializer());
   template.setHashValueSerializer(new StringRedisSerializer());
   template.setValueSerializer(new StringRedisSerializer());
   return template;
}
Теперь автоматически подключите класс RedisTemplate и получите доступ к данным из базы данных Redis.
@Autowired RedisTemplate<String, Object> redis; Map<Object,Object> datalist = redis.opsForHash().entries(“Redis_code_index_key”);
JdbcTemplate
Чтобы получить доступ к реляционной базе данных с помощью JdbcTemplate в приложении Spring Boot, нам нужно добавить зависимость JDBC Spring Boot Starter в наш файл конфигурации сборки.
Затем, если вы @Autowired класс JdbcTemplate, Spring Boot автоматически подключается к базе данных и устанавливает источник данных для объекта JdbcTemplate.
@Autowired
JdbcTemplate jdbcTemplate;
Collection<Map<String, Object>> rows = jdbc.queryForList("SELECT QUERY");
Аннотация @Repository должна быть добавлена в файл класса. Аннотация @Repository используется для создания хранилища базы данных для вашего приложения Spring Boot.
@Repository
public class ProductServiceDAO {
}
Несколько DataSource
Мы можем хранить «n» номеров источников данных в одном приложении Spring Boot. Приведенный здесь пример показывает, как создать более 1 источника данных в приложении Spring Boot. Теперь добавьте две детали конфигурации источника данных в файл свойств приложения.
Для пользователей файла свойств добавьте следующие свойства в файл application.properties.
spring.dbProductService.driverClassName = com.mysql.jdbc.Driver spring.dbProductService.url = jdbc:mysql://localhost:3306/PRODUCTSERVICE?autoreconnect = true spring.dbProductService.username = root spring.dbProductService.password = root spring.dbProductService.testOnBorrow = true spring.dbProductService.testWhileIdle = true spring.dbProductService.timeBetweenEvictionRunsMillis = 60000 spring.dbProductService.minEvictableIdleTimeMillis = 30000 spring.dbProductService.validationQuery = SELECT 1 spring.dbProductService.max-active = 15 spring.dbProductService.max-idle = 10 spring.dbProductService.max-wait = 8000 spring.dbUserService.driverClassName = com.mysql.jdbc.Driver spring.dbUserService.url = jdbc:mysql://localhost:3306/USERSERVICE?autoreconnect = true spring.dbUserService.username = root spring.dbUserService.password = root spring.dbUserService.testOnBorrow = true spring.dbUserService.testWhileIdle = true spring.dbUserService.timeBetweenEvictionRunsMillis = 60000 spring.dbUserService.minEvictableIdleTimeMillis = 30000 spring.dbUserService.validationQuery = SELECT 1 spring.dbUserService.max-active = 15 spring.dbUserService.max-idle = 10 spring.dbUserService.max-wait = 8000
Пользователи Yaml должны добавить следующие свойства в ваш файл application.yml.
spring:
   dbProductService: 
      driverClassName: com.mysql.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/PRODUCTSERVICE?autoreconnect=true"
      password: "root"
      username: "root"
      testOnBorrow: true
      testWhileIdle: true
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 30000
      validationQuery: SELECT 1
      max-active: 15
      max-idle: 10
      max-wait: 8000
   dbUserService: 
      driverClassName: com.mysql.jdbc.Driver
      url: "jdbc:mysql://localhost:3306/USERSERVICE?autoreconnect=true"
      password: "root"
      username: "root"
      testOnBorrow: true
      testWhileIdle: true
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 30000
      validationQuery: SELECT 1    
      max-active: 15
      max-idle: 10
      max-wait: 8000
Теперь создайте класс Configuration для создания DataSource и JdbcTemplate для нескольких источников данных.
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration
public class DatabaseConfig {
   @Bean(name = "dbProductService")
   @ConfigurationProperties(prefix = "spring.dbProductService")
   @Primary
   public DataSource createProductServiceDataSource() {
      return DataSourceBuilder.create().build();
   }
   @Bean(name = "dbUserService")
   @ConfigurationProperties(prefix = "spring.dbUserService")
   public DataSource createUserServiceDataSource() {
      return DataSourceBuilder.create().build();
   }
   @Bean(name = "jdbcProductService")
   @Autowired
   public JdbcTemplate createJdbcTemplate_ProductService(@Qualifier("dbProductService") DataSource productServiceDS) {
      return new JdbcTemplate(productServiceDS);
   }
   @Bean(name = "jdbcUserService")
   @Autowired
   public JdbcTemplate createJdbcTemplate_UserService(@Qualifier("dbUserService") DataSource userServiceDS) {
      return new JdbcTemplate(userServiceDS);
   }
}
Затем автоматически подключите объект JDBCTemplate с помощью аннотации @Qualifier.
