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.