Java踩坑记录

1.quartz整合spring框架service层对象注入为null解决方案

 

JobDetailFactoryBean中注入的是一个cn.itcast.quartz.HelloJob实现类的全路径,底层会反射创建出一个HelloJob的对象,但是该对象不是由spring管理的,所以业务层的对象无法注入。

办法:

JobFactoryService

 

public class JobFactoryService extends AdaptableJobFactory {
    protected static Logger logger = LoggerFactory.getLogger(JobFactoryService.class);
    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object jobInstance = super.createJobInstance(bundle);
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

 

spring-quartz.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context ="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd">


    <!-- 1:定义任务的bean ,这里使用JobDetailFactoryBean,也可以使用MethodInvokingJobDetailFactoryBean ,配置类似-->
    <bean name="demoJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <!-- 指定job的名称 -->
        <property name="name" value="demoJob"/>
        <!-- 指定job的分组 -->
        <property name="group" value="demo_group"/>
        <!-- 指定具体的job类 -->
        <property name="jobClass" value="com.maimob.finsys.job.MessageCenterJob"/>
        <!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中会删除该任务  -->
        <property name="durability" value="true"/>
        <!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 -->
        <property name="applicationContextJobDataKey" value="applicationContext"/>
    </bean>
    <!-- 2.2:定义触发器的bean,定义一个Cron的Trigger,一个触发器只能和一个任务进行绑定 -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!-- 指定Trigger的名称 -->
        <property name="name" value="hw_trigger"/>
        <!-- 指定Trigger的名称 -->
        <property name="group" value="hw_trigger_group"/>
        <!-- 指定Tirgger绑定的Job -->
        <property name="jobDetail" ref="demoJob"/>
        <!-- 指定Cron 的表达式 ,当前是每隔600s运行一次 -->
        <property name="cronExpression" value="0/10 * * * * ?" />
    </bean>
    <bean id="jobFactoryService" class="com.maimob.finsys.job.JobFactoryService"/>
    <!-- 3.定义调度器,并将Trigger注册到调度器中 -->
    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobFactory" ref="jobFactoryService"/>
        <property name="triggers">
            <list>
                <ref bean="cronTrigger"/>
            </list>
        </property>
        <!-- <property name="autoStartup" value="true" /> -->
    </bean>
</beans>

2.AES加密在项目中加密中文解密出来后就是乱码,但是用test类写就没问题,这个原因应该是项目的编码造成的

办法:getBytes("utf-8")

两次踩,IDEA中要设置otherSettings->default Settings中字符编码

 

public static String encrypt(String sSrc, String sKey) throws Exception {

SecretKeySpec skeySpec = create128BitsKey(sKey);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"

IvParameterSpec iv = create128BitsIV(sKey);//使用CBC模式,需要一个向量iv,可增加加密算法的强度

cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));

return Base64Utils.encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。

}

 

3.批量更新sql报错

数据源加上 allowMultiQueries=true

4.aop和事务同时使用

在使用数据源切换和事务时,必须要指定order,在事务之前进行数据源的切换,不然会造成切换数据源出错

6.想要获取mybatis中Update为实际影响的条数要在数据源加上useAffectedRows=true,否则update返回的是匹配条数而不是影响条数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值