標籤:port stat xtend web 沒有 boot autowired .config imp
接上篇,使用redis做緩衝
建立spring boot 工程,添加pom引用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
View Code
User類
public class User { private Integer id; private String name; private Integer sex; private Integer age; public User(String name, Integer sex, Integer age) { this.name = name; this.sex = sex; this.age = age; } public User(Integer id, String name, Integer sex, Integer age) { this.id = id; this.name = name; this.sex = sex; this.age = age; } public User() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}View Code
UserRepository介面
import org.apache.ibatis.annotations.*;@Mapperpublic interface UserRepository { @Select("select * from person where id=#{id}") User findById(@Param("id") Integer id); @Insert("INSERT INTO person(name,sex,age) VALUES (#{name},#{sex},#{age})") User save(User user); @Update("UPDATE person SET name=#{name},sex=#{sex},age=#{age} WHERE id=#{id}") User update(User user); @Delete("DELETE FROM person WHERE id=#{id}") void delete(Integer id);}View Code
UserRedis
import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Repository;import org.springframework.util.StringUtils;import java.util.List;import java.util.concurrent.TimeUnit;@Repositorypublic class UserRedis { @Autowired private RedisTemplate<String,String> redisTemplate; public void add(String key,Long time,User user){ Gson gson=new Gson(); redisTemplate.opsForValue().set(key,gson.toJson(user),time, TimeUnit.MINUTES); } public void add(String key, Long time, List<User> users){ Gson gson=new Gson(); redisTemplate.opsForValue().set(key,gson.toJson(users),time, TimeUnit.MINUTES); } public User get(String key){ Gson gson=new Gson(); User user=null; String userJson=redisTemplate.opsForValue().get(key); if(!StringUtils.isEmpty(userJson)){ user=gson.fromJson(userJson,User.class); } return user; } public List<User> getList(String key){ Gson gson=new Gson(); List<User> users=null; String listJson=redisTemplate.opsForValue().get(key); if(!StringUtils.isEmpty(listJson)){ users=gson.fromJson(listJson,new TypeToken<List<User>>(){}.getType()); } return users; } public void delete(String key){ redisTemplate.opsForValue().getOperations().delete(key); }}View Code
UserService
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class UserService { @Autowired private UserRepository userRepository; @Autowired private UserRedis userRedis; private static final String keyHead="mysql:get:user:"; public User findById(Integer id){ User user=userRedis.get(keyHead+id); if(user==null){ user= userRepository.findById(id); if(user!=null){ userRedis.add(keyHead+id,30L,user); } } return user; } public User create(User user){ User newUser= userRepository.save(user); if(newUser!=null){ userRedis.add(keyHead+newUser.getId(),30L,newUser); } return newUser; } public User update(User user){ if(user!=null){ userRedis.delete(keyHead+user.getId()); userRedis.add(keyHead+user.getId(),30L,user); } return userRepository.update(user); } public void delete(Integer id){ userRedis.delete(keyHead+id); userRepository.delete(id); }}View Code
RedisConfig
import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.CachingConfigurerSupport;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.cache.RedisCacheManager;import org.springframework.data.redis.core.RedisTemplate;@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport { @Bean public CacheManager cacheManager(@SuppressWarnings("rawtypes")RedisTemplate redisTemplate) { RedisCacheManager manager=new RedisCacheManager(redisTemplate); manager.setDefaultExpiration(43200); return manager; }}View Code
UserController
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class UserController { @Autowired private UserService userService; @RequestMapping(value = "/user/{id}") public String show(@PathVariable Integer id){ User user=userService.findById(id); return user.getName(); }}View Code
application.propeties配置
spring.datasource.url= jdbc:mysql://192.168.31.146:3306/mydbspring.datasource.username= rootspring.datasource.password= passspring.redis.host=192.168.31.146spring.redis.port=6379spring.datasource.druid.url= jdbc:mysql://192.168.31.146:3306/mydbspring.datasource.druid.username= rootspring.datasource.druid.password= passspring.datasource.druid.initial-size=5spring.datasource.druid.max-active=20spring.datasource.druid.min-idle=5spring.datasource.druid.max-wait=60000spring.datasource.druid.pool-prepared-statements=truespring.datasource.druid.max-pool-prepared-statement-per-connection-size=20#spring.datasource.druid.max-open-prepared-statements=spring.datasource.druid.validation-query=select 1 from dual#spring.datasource.druid.validation-query-timeout=spring.datasource.druid.test-on-borrow=falsespring.datasource.druid.test-on-return=falsespring.datasource.druid.test-while-idle=truespring.datasource.druid.time-between-eviction-runs-millis=60000spring.datasource.druid.min-evictable-idle-time-millis=300000#spring.datasource.druid.max-evictable-idle-time-millis=#配置多個英文逗號分隔spring.datasource.druid.filters=stat,wall,log4j
View Code
開啟druid監控sql:http://localhost:8080/druid/sql.html
啟動docker redis 鏡像 ,配置6379連接埠映射
docker run -d -p 6379:6379 redis
開啟RedisDesktopManager用戶端查看資料
開啟頁面:http://localhost:8080/user/1
可以看到druid有了查詢
redis中也有資料
多次重新整理頁面,可以看到沒有再去查資料庫,druid監控中只有一條sql
spring boot + mybatis + druid + redis