Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<groupId>com.example</groupId>
<artifactId>demo-1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<packaging>war</packaging>
<name>demo-1</name>
<description>Demo project for Spring Boot</description>

Expand All @@ -24,6 +24,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
Expand All @@ -32,6 +36,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
<!--
<dependency>
<groupId>com.google.code.gson</groupId>
Expand Down Expand Up @@ -64,13 +73,12 @@
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>

</project>
</project>
30 changes: 28 additions & 2 deletions demo/src/main/java/com/example/bean/UserBean.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.bean;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
Expand All @@ -10,7 +11,12 @@

@Entity
@Table(name="UDATA", schema = "System")
public class UserBean {
public class UserBean implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;

@Id
private String account;

Expand All @@ -23,6 +29,12 @@ public class UserBean {
@Column(name="reg")
private Date reg;

@Column(name="login")
private Date login;

@Column(name="logout")
private Date logout;

public String getAccount() {
return account;
}
Expand All @@ -48,9 +60,23 @@ public void setReg(Date reg) {
this.reg = reg;
}



public Date getLogin() {
return login;
}
public void setLogin(Date login) {
this.login = login;
}
public Date getLogout() {
return logout;
}
public void setLogout(Date logout) {
this.logout = logout;
}
@Override
public String toString() {
return "account="+account+",pwd="+pwd+",name="+name+",reg="+reg;
return "account="+account+",pwd="+pwd+",name="+name+",reg="+reg+",login="+login+",logout="+logout;
}

}
68 changes: 68 additions & 0 deletions demo/src/main/java/com/example/config/RedisConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.example.config;




import java.lang.reflect.Method;
import java.time.Duration;

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;


public class RedisConfig extends CachingConfigurerSupport {
@Bean
public JedisConnectionFactory redisConnectionFactory() {

return new JedisConnectionFactory();
}

// key值命名
@Bean
public KeyGenerator wiselyKeyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}

return sb.toString();
}
};
}

@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}

@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {

RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer());
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig()
.serializeValuesWith(pair) // 序列化方式
.entryTtl(Duration.ofHours(1)); // 過期時間

return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(factory))
.cacheDefaults(defaultCacheConfig).build();

}
}
23 changes: 23 additions & 0 deletions demo/src/main/java/com/example/controller/ScheduledTasks.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;



@Component
public class ScheduledTasks {
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);

private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

@Scheduled(fixedRate=5000)
public void reportCurrentTime() {
log.info("The time is now {}", dateFormat.format(new Date()));
}
}
20 changes: 19 additions & 1 deletion demo/src/main/java/com/example/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
Expand All @@ -17,14 +19,16 @@
import com.example.service.UserService;

@SpringBootApplication
@EnableScheduling
@Controller
@ComponentScan("com.example.service")
@EntityScan("com.example.bean")
@EnableJpaRepositories("com.example.repository")
public class UserController {
@Autowired
private UserService userService;



public static void main(String[] args) {
SpringApplication.run(UserController.class, args);
}
Expand Down Expand Up @@ -56,5 +60,19 @@ public List<UserBean> deleteUData(@RequestParam String account)
{
System.out.println("controller="+account);
return userService.deleteUser(account);
}
@ResponseBody
@GetMapping("/login")
public UserBean loginUser(@RequestParam String account, @RequestParam String pwd)
{

return userService.loginUser(account, pwd);
}
@ResponseBody
@GetMapping("/logout")
public UserBean logoutUser(@RequestParam String account, @RequestParam String pwd)
{

return userService.logoutUser(account, pwd);
}
}
16 changes: 16 additions & 0 deletions demo/src/main/java/com/example/repository/UserRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ public interface UserRepository extends CrudRepository<UserBean,String>{
@Query(value="SELECT * FROM UDATA WHERE ACCOUNT=?1",nativeQuery=true)
UserBean queryByAccount(String account);

@Query(value="SELECT * FROM UDATA WHERE ACCOUNT=?1 AND PWD=?2",nativeQuery=true)
UserBean verifyIdPwd(String account, String pwd);

@Query(value="INSERT INTO UDATA(ACCOUNT,PWD,NAME,REG)VALUES(?1,?2,?3,SYSDATE)",nativeQuery=true)
@Modifying
@Transactional
Expand All @@ -22,10 +25,23 @@ public interface UserRepository extends CrudRepository<UserBean,String>{
@Modifying
@Transactional
void modifyByAccount(String pwd,String name,String account);

@Query(value="UPDATE UDATA SET LOGIN=SYSDATE WHERE ACCOUNT=?1",nativeQuery=true)
@Modifying
@Transactional
void modifyLoginTime(String account);

@Query(value="UPDATE UDATA SET LOGOUT=SYSDATE WHERE ACCOUNT=?1",nativeQuery=true)
@Modifying
@Transactional
void modifyLogoutTime(String account);

@Query(value="DELETE FROM UDATA WHERE ACCOUNT=?1 ",nativeQuery=true)
@Modifying
@Transactional
void deleteByAccount(String account);




}
24 changes: 22 additions & 2 deletions demo/src/main/java/com/example/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import com.example.bean.UserBean;
Expand All @@ -13,6 +16,7 @@


@Service
@CacheConfig(cacheNames = "userService")
public class UserService {
@Autowired
private UserRepository userRepository;
Expand Down Expand Up @@ -46,7 +50,23 @@ public List<UserBean> deleteUser(String account) {
return userBeans;
}



@Cacheable(value = "userCache")
public UserBean loginUser(String account, String pwd){
UserBean userBean = userRepository.verifyIdPwd(account,pwd);
if(userBean!=null) {
userRepository.modifyLoginTime(account);
}
userBean = findUser(account);
return userBean;
}

@CacheEvict(value = "userCache")
public UserBean logoutUser(String account, String pwd) {
if(account!=null && pwd!=null) {
userRepository.modifyLogoutTime(account);
}
UserBean userBean = findUser(account);
return userBean;
}

}
14 changes: 13 additions & 1 deletion demo/src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,16 @@ spring.jpa.properties.hibernate.format_sql=true
#spring.thymeleaf.suffix=.html
#spring.thymeleaf.mode=HTML5
#spring.thymeleaf.encoding=UTF-8
#spring.thymeleaf.content-type=text/html
#spring.thymeleaf.content-type=text/html

# REDIS (RedisProperties)

spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=300