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返回的是匹配条数而不是影响条数

腾讯TBS是一款基于Chromium内核的浏览器内核,可以在Android应用中实现WebView的功能。如果在使用TBS时出现加载失败的问题,可能是由于以下原因造成的: 1. TBS内核未正确初始化:TBS内核必须在应用启动时进行初始化,否则会导致后续的加载失败。您可以在Application的onCreate()方法中添加以下代码进行初始化: ```java QbSdk.initX5Environment(getApplicationContext(), null); ``` 2. TBS内核版本不兼容:如果您的应用中使用的TBS内核版本与当前设备上安装的Chrome或WebView版本不兼容,可能会导致TBS内核加载失败。您可以尝试升级或降级TBS内核版本,以解决兼容性问题。 3. 缺少必要的权限:TBS内核需要读取设备存储的权限,如果您的应用未获取相关权限,可能会导致内核加载失败。您可以在Manifest文件中添加以下权限声明: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> ``` 4. 设备不支持TBS内核:部分设备可能不支持TBS内核,导致加载失败。您可以在加载TBS内核前,使用以下代码检查当前设备是否支持TBS内核: ```java if (QbSdk.isTbsCoreInited()) { // TBS内核已经初始化 } else { // TBS内核未初始化,需要进行初始化 } ``` 如果设备不支持TBS内核,您可以使用系统自带的WebView或其他第三方的WebView替代TBS内核。 5. 其他原因:TBS内核加载失败可能还有其他原因,例如网络连接问题、内存不足等。您可以查看日志信息,寻找更详细的错误信息,以便进一步排查问题。 总之,TBS内核加载失败可能是由于多种原因造成的,需要根据具体情况进行排查和解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值