redis

配置类:
@Configuration
就是xml的作用,代替了xml,配置Bean的属性。
服务启动的时候,扫描加载这些配置类。实则就是读取xml
中配置好的属性。

Spring boot 集成了Spring的一些常用的东西。
Spring Cloud 又是Spring boot的一种集合。
所以很多在Spring中需要手动集成的,在Spring boot
中都被自动集成了。简单实用就行。

Spring Data Redis的操作。

两个模版,其中StringRedisTemplate只对String类型操作。
RedisTemplate
StringRedisTemplate
数据库存储到Redis的时候,我们的键值(Key- Value)都是通过Spring
提供的系列化接口Serializer系列化到数据库中。
RedisTemplate – JdkSerializationRedisSerializer
StringRedisTemplate – StringRedisSerializer

Redis在Spring中直接使用和在Spring boot中使用是不一样的。
还有Redis存储对象的时候,键和值需要系列化。以Json格式存储
进行转换的时候,不会不乱。

Redis支持的数据类型:

Set:

/**
* 添加元素
* @param key
* @param members
*/
fun add(key: String, vararg members: String): Long = try {
getRedisTemple().opsForSet().add(key, *members)
} catch (e: Exception) {
log.error(“redis add key[{}] members: {} error: {}.”, key, members.asList(), printException(e))
0L
}

key 是Set集合的名称。members是集合中的元素。
Set set1 中有多个个集合。

String:

Hash
这里我们把Redis的key称作key(键),把数据结构hash中的key称为field(域)。

key:作为redis的key,可以一对多。

一个key对应多个hash记录。 hash记录存在key 和 value
public void addHash(String key, String field, String value){
redisService.put(key, field, value);
}

//存在问题: 对象json化后,存入在redis中顺序乱了,无法反序列化了。

{
“id”: “1”,
“tradeNo”: “454545454545”
}

{
“ammount”: “100”,
“fee”: “10”,
“id”: “1”,
“reconid”: “BLUEPAY”,
“tradeNo”: “454545454545”
}

父POM 和 子POM的区别:


子POM可以继承父POM的配置属性。


// 控制扫描类
@RestController == {@Controller,@ResponseBody}
只是在Controller类上加@Controller注解,是没有效果的。postman无法返回结果。
必须是@RestController

// 添加包扫描
@ComponentScan(basePackages = {“asia.bluepay.common.redis”, “spring.case15”})

填加注解扫描包。
默认扫描路径,是存在的吗?

如果借用第三方包中的某个接口,假设redis中的

RedisServiceImpl中的接口。

@Autowired
RedisServiceImpl redisService;

public void compare(){
    redisService.add();
}

因为在启动的时候spring会直接扫描默认目录或者指定目录。如果
自动注入的实例,是另外一个目录,那么容器中就不存在此类的实例,
所以自然无法自动注入。会抛错误。

@ComponentScan
在注解的世界中,如果要引入第三方jar,需要的用@ComponentScan注解指定扫描jar所在的路径.

一般工程中,启动类中都需要指定一下扫描包,这样可以减少
启动加载搜索目录的时间,提高效率。

关于Spring boot自动扫描包范围的问题

 经历一个idea开发的多模块项目开发。新建模块总访问不了基础公用模块中的bean、aspect等注解配置的相关信息。困扰了很长时间,后来发现是不了解SpringBoot注解扫描范围约定,将新项目的Application.java入口文件在包中放得过深。

  附:SpringBoot注解扫描范围约定
  SpringBoot项目的注解扫描默认规则是根据Application类所在的包位置从上往下扫描!
  “Application类”是指SpringBoot项目入口类。这个类的位置很关键。如果Application类所在的包为:com.iteye.wallimn,
则只会扫描com.iteye.wallimn包及其所有子包,如果service或dao所在包不在com.iteye.wallimn及其子包下,则不会被扫描!
  如果Application类放在com.iteye.wallimn.app包中,那么与app的同级包、叔叔包是不会被扫描的。

所以main方法在包路径中的位置也是一个关键。

当然主动配置@ComponentScan是更保险的。

  • @Description:
    */
    @Service
    @Slf4j
    public class UCBankWayService {
    @Autowired
    private HttpAskInterface httpAskInterface;

    private String queryBankRecordUrl = “https://bankgw.bluepay.asia/bankCharge/queryBills?channelType={1}&innerids={2}”;
    public String queryBankRecond(String bluepayBankId, Integer channelType) {
    String queryUrl = queryBankRecordUrl.replace(“{1}”,String.valueOf(channelType)).
    replace(“{2}”,bluepayBankId);
    try {
    log.info(“请求网关账单查询记录: request Url:{} “,queryBankRecordUrl);
    HttpResponse response = httpAskInterface.synSendGet(queryUrl);
    log.info(“请求网账单关查询返回 :{} “, JSON.toJSONString(response));
    if(response.getStatusCode() == 200 ) {
    log.info(“请求网账单关查询返回200 :{} “, JSON.toJSONString(response));
    return response.getResult();
    }

    } catch (Exception e) {
        log.error("请求网关账单查询记录 异常"+e.getMessage());
        e.printStackTrace();
        return null;
    }
    return null;
    

    }
    }

//这就是接口的调用,调用UC的接口,传入相关的参数. 然后就可以得到返回的HttpResponse
queryBankRecordUrl = “https://bankgw.bluepay.asia/bankCharge/queryBills?channelType={1}&innerids={2}”;

//fastjson

Object 转成 json字符串

String reconMemberJson = JSONObject.toJSONString(reconMember); //对象转Json

json字符串转成 Object

ReconMember reconMember1 = JSON.parseObject(reconMemberJson, ReconMember.class);

还有一种直接从json字符串中获取对象的某个属性值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值