一、集成 MySQL 數據庫
1.1 配置 MySQL
添加依賴
<dependencies>
<!--Spring 數據庫相關依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql 驅動依賴-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
設置配置文件
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
username: root
password: sa000
1.2 測試數據庫連接
添加測試依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
在 test/java 目錄下新建測試類
@SpringBootTest
public class DataBaseTest {
@Autowired
private DataSource dataSource;
@Test
public void testConnection() {
try {
Connection connection = dataSource.getConnection();
Assert.assertNotNull(connection);
} catch (SQLException e) {
fail("數據庫連接獲取失敗,錯誤原因:" + e);
}
}
}
執行測試,發現綠條說明測試通過。
1.3 設置連接池
SpringBoot 在我們引入 spring-boot-starter-jdbc或spring-boot-starter-data-jpa 依賴后就會默認啟用連接池功能,它的連接池默認創建選擇規則如下:
-
優先尋找創建 HikariCP 連接池
-
如果沒有 HikariCP 連接池,會查找創建 Tomcat
-
如果沒有 Tomcat 連接池,會查找創建 dbcp
-
如果沒有 dbcp 連接池,會查找創建 dbcp2
-
也可以使用 spring.datasource.type 屬性指定連接池類型
spring.datasource.type= com.zaxxer.hikari.HikariDataSource
我們來通過一個測試方法驗證下:
@SpringBootTest
public class DataBaseTest {
@Autowired
private DataSource dataSource;
@Test
public void testDataSourceType(){
Assert.assertEquals(HikariDataSource.class,dataSource.getClass());
}
}
執行測試,發現綠條說明測試通過。
常用連接池配置如下:
#驗證連接的有效性
spring.datasource.primary.test-while-idle=true
#獲取連接時候驗證,會影響性能
spring.datasource.primary.test-on-borrow=false
#在連接歸還到連接池時是否測試該連接
spring.datasource.primary.test-on-return=false
spring.datasource.primary.validation-query=SELECT 1 FROM DUAL
#空閑連接回收的時間間隔,與test-while-idle一起使用,設置5分鍾
spring.datasource.primary.time-between-eviction-runs-millis=300000
#連接池空閑連接的有效時間 ,設置30分鍾
spring.datasource.primary.min-evictable-idle-time-millis=1800000
spring.datasource.primary.initial-size=5
#指定連接池中最大的活躍連接數.
spring.datasource.primary.max-active=50
#指定連接池等待連接返回的最大等待時間,毫秒單位.
spring.datasource.primary.max-wait=60000
#指定必須保持連接的最小值
spring.datasource.primary.min-idle=5
更多配置請參考 SprignBoot文檔。
1.4 JDBC 使用
配置好數據庫之后,我們就來使用一下最基本的數據庫操作。
在數據庫 test 新建一個用戶表:
CREATE TABLE `sys_user` (
`user_id` int(21) NOT NULL COMMENT '用戶編碼',
`user_name` varchar(50) DEFAULT NULL COMMENT '用戶名',
`age` int(3) DEFAULT NULL COMMENT '年齡',
`email` varchar(100) DEFAULT NULL COMMENT '郵箱',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在 test/java 目錄下新建測試類
@SpringBootTest
public class JdbcTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void test() {
delete();
Assert.assertEquals(0,count());
add();
Assert.assertEquals(1,count());
}
private int count() {
String sql = "select count(user_id) from sys_user ";
Integer result = jdbcTemplate.queryForObject(sql, Integer.class);
return result;
}
private void add() {
String sql = "insert into sys_user " +
"values('1','marklogzhu','26','marklogzhu@163.com')";
jdbcTemplate.execute(sql);
}
private void delete() {
String sql = "delete from sys_user ";
jdbcTemplate.execute(sql);
}
}
執行測試,發現綠條說明測試通過。
二、集成 Redis 數據庫
2.1 配置 Redis
添加依賴
<dependencies>
......
<!--Spring redis 依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--redis 連接池依賴-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
設置配置文件
spring:
redis:
host: 127.0.0.1
port: 6379
# 連接超時時間
timeout: 1000ms
jedis:
pool:
# 最大連接數
max-active: 8
# 最大阻塞等待時間(負數表示沒限制)
max-wait: -1ms
# 最大空閑
max-idle: 8
# 最小空閑
min-idle: 0
測試
@SpringBootTest
public class RedisTest {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void testSimpleValue(){
String key = "name";
String name ="MarkLogZhu";
stringRedisTemplate.opsForValue().set(key,name);
String result = stringRedisTemplate.opsForValue().get(key);
Assert.assertEquals(name,result);
}
}
執行測試,發現綠條說明測試通過。
2.2 實現序列化功能
添加依賴
<dependencies>
......
<!--JSON工具類依賴-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
設置序列化功能
@Configuration
public class RedisConfig {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@SuppressWarnings({"unchecked", "rawtypes"})
@Bean
public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
final Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(
Object.class);
final ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build();
objectMapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
return jackson2JsonRedisSerializer;
}
}
測試
@SpringBootTest
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testObjectValue(){
String key = "obj";
SysUser user = new SysUser(1,"MarkLogZhu");
redisTemplate.opsForValue().set(key,user);
SysUser result = (SysUser)redisTemplate.opsForValue().get(key);
Assert.assertEquals(user,result);
}
}
執行測試,發現綠條說明測試通過。
