Springboot 手動搭建項目 --redis配置&日志完善+用戶名


項目git網址:https://github.com/David-BIQI/manage.git(項目使用比較新的springboot2.0 還有jdk8 )

參照的代碼規范:https://github.com/xwjie/PLMCodeTemplate.git (這個是一套能夠落地的代碼規范,跟着風哥學習很多)

redis配置
  • 如何配置
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
</dependency>
#redis設置
  redis:
    host: localhost
    port: 6379
    database: 0
  • redis的格式轉換

也有轉成json存放的,寫的demo中就有stringRedisTemplate存放的,下面是序列化的使用

package com.common.redis;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;

/**
 * redis序列化的工具類
 */
public class RedisObjectSerializer implements RedisSerializer<Object> {

  private Converter<Object, byte[]> serializer = new SerializingConverter();
  private Converter<byte[], Object> deserializer = new DeserializingConverter();

  static final byte[] EMPTY_ARRAY = new byte[0];

  @Override
  public Object deserialize(byte[] bytes) {
    if (isEmpty(bytes)) {
      return null;
    }

    try {
      return deserializer.convert(bytes);
    } catch (Exception ex) {
      throw new SerializationException("Cannot deserialize", ex);
    }
  }

  @Override
  public byte[] serialize(Object object) {
    if (object == null) {
      return EMPTY_ARRAY;
    }

    try {
      return serializer.convert(object);
    } catch (Exception ex) {
      return EMPTY_ARRAY;
    }
  }

  private boolean isEmpty(byte[] data) {
    return (data == null || data.length == 0);
  }
}
package com.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.StringRedisSerializer;

import com.biqi.dto.UserDto;
import com.common.redis.RedisObjectSerializer;

@Configuration
public class RedisConfig {

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        return new JedisConnectionFactory();
    }

    @Bean
    public RedisTemplate<String, UserDto> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, UserDto> template = new RedisTemplate<String, UserDto>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new RedisObjectSerializer());
        return template;
    }


}
  • redis的讀與取,這樣就能實現redis中的簡單的讀寫功能
    @Autowired
    private StringRedisTemplate stringRedisTemplate;


    @Autowired
    private RedisTemplate<String, UserDto> redisTemplate;


    public String saveAndGet(String name) {
        stringRedisTemplate.opsForValue().set(name, name);
        String temp = stringRedisTemplate.opsForValue().get(name);
        return temp;
    }



    public Boolean saveUserBySerializer(Integer id) {
        User user = userService.getUserByid(id);
        notNull(user,"用戶信息不存在");
        UserDto temp = new UserDto();
        temp.setName(user.getName());
        temp.setPhone(user.getPhone());
        redisTemplate.opsForValue().set(user.getName(), temp);

        return true;
    }

 

 
日志的完善,
  • 如何寫好日志 曉風輕 項目aop的修改

1.不要依賴debug,多依賴日志。

別人面對對象編程,你面對debug編程。有些人無論什么語言,最后都變成了面對debug編程。哈哈。這個習慣非常非常不好!debug會讓你寫代碼的時候偷懶不打日志,而且很浪費時間。改掉這個惡習。

2. 代碼開發測試完成之后不要急着提交,先跑一遍看看日志是否看得懂。

日志是給人看的,只要熱愛編程的人才能成為合格程序員,不要匆匆忙忙寫完功能測試ok就提交代碼,日志也是功能的一部分。要有精益求精的工匠精神!

  • local怎么的使用,完善日志,在filter的時候判斷得到登錄用戶的用戶名,放入到MD5中,然后在log日志中添加上用戶的信息
    @Override
        public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)
                throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) srequest;
            String url = request.getRequestURI();
            // Login的時候跳過,不然都進入其他
            if (LOGIN_URL.equals(url)) {
                System.out.println("這是登錄的方法咯 ");
                filterChain.doFilter(srequest, sresponse);
            } else {
                HttpSession session = request.getSession(true);
                if (session == null) {
                    throw new UnloginException();
                }
                // 從session中獲取用戶信息放到工具類中
                String userToken = (String) session.getAttribute(UserUtil.KEY_USER);
                UserUtil.setUser(userToken);
                filterChain.doFilter(srequest, sresponse);
            }
        }
    public static void setUser(String userid) {
        tlUser.set(userid);
        // 把用戶信息放到log4j
        MDC.put(KEY_USER, userid);
    }
    <!-- 控制台輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符 -->
            <pattern>%d{MM-dd HH:mm:ss} %X{user} [%thread] %-5level-%logger{50} -%msg%n</pattern>
        </encoder>
    </appender>

效果如下

這樣日志用戶信息基本完成,不過要寫好日志,還有一番功夫需要做,一看日志就知道業務實現,成功失敗的次數等等,pick myself up !!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM