spring-jfinal 用于整合 spring 和 jfinal。
jfinal、javassist v3.*、Spring v3+(3.2.0之前需要依赖cglib)
<dependency> <groupId>cc.ecore</groupId> <artifactId>spring-jfinal-plugin</artifactId> <version>x.x.x</version> </dependency>
<context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/spring.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.SpringJFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>com.demo.test.CommonConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
以上通过 SpringJFinalFilter 过滤器加载 spring 。 其中 JfinalConfig 自动注册 springbean(JfinalConfig 中可以使用 注解注入属性哦,或者 实现 ApplicationContextAware 接口自动注入 ApplicationContext)。
初始化顺序(不配置 ContextLoaderListener 的情况下): SpringJFinalFilter -> ApplicationContext -> JFinal -> JFinalConfig ... (其他 照旧 ) . 初始化顺序(配置 ContextLoaderListener 的情况下)。 ApplicationContext -> SpringJFinalFilter -> JFinal -> JFinalConfig ... (其他 照旧 ) .
public class CommonConfig extends JFinalConfig { @Autowired public void setApplicationContext(ApplicationContext ctx) { System.out.println("HelloController attr[ApplicationContext] 已注入。。"); } ... }
其中 HelloJFinalConfig 自动注入 springbean , scope = "singleton" .
public class HelloController extends Controller { @Autowired public void setApplicationContext(ApplicationContext ctx) { System.out.println("HelloController attr[ApplicationContext] 已注入。。"); } }
其中 Controller 自动注入 springbean , scope = "prototype" 原因是 jfinal 也是每次请求创建实例 .
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="username" value="${db.userName}" /> <property name="password" value="${db.passWord}" /> <property name="url" value="${db.jdbcUrl}" /> <property name="driverClassName" value="${db.driverClassName}" /> <property name="initialSize" value="${db.initialSize}" /> <property name="maxActive" value="${db.maxActive}" /> <property name="minIdle" value="${db.minIdle}" /> </bean> <!-- spring 事务管理 ,ActiveRecordPlugin可以获得此 dataSource 可以把事务交给spring 管理 --> <bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"> <property name="targetDataSource" ref="druidDataSource" /> </bean> <!-- ================================事务相关控制================================================= --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSourceProxy"></property> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="delete*" propagation="REQUIRED" read-only="false" /> <tx:method name="insert*" propagation="REQUIRED" read-only="false" /> <tx:method name="update*" propagation="REQUIRED" read-only="false" /> <tx:method name="find*" propagation="SUPPORTS" /> <tx:method name="get*" propagation="SUPPORTS" /> <tx:method name="select*" propagation="SUPPORTS" /> </tx:attributes> </tx:advice> <!-- 把事务控制在Service层 --> <aop:config> <aop:pointcut id="pc" expression="execution(public * demo.service.*.*(..))" /> <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" /> </aop:config>
以上是 xml 配置方式。 重点是在 ActiveRecordPlugin 中注入 代理数据源。
public static void main(String[] args) { CtFactory.toClass();// 这个必须启动前执行 // ... }
spring-jfinal 详细介绍 spring-jfinal 作用于 spring 和 jfinal 的整合。 依赖 jar jfinal、javassist v3.*、Spring v3+(3.2.0之前需要依赖cglib) 使用Maven <dependency> <groupId>cc.ecore</groupId> <artifactId>spring-jfin
mica-weixin 使用文档 说明 jfinal weixin 的 spring boot starter,这个starter是为了方便boot用户使用。 具体demo请查看:mica-weixin-demo 和 JFinal-weixin文档 开源推荐 Spring boot 微服务,高效开发之 mica 工具集:https://gitee.com/596392912/mica Avue 一
在一些特殊场景,我们用到了Spring Boot,数据ORM层并没有使用流行的hibernate或mybatis,而采用了国内开源的jFinal中的ActiveRecord。不要问为什么不直接使用jFinal,就是这么个特殊需求。 在我们的需求中,需要使用多个数据源,并支持事务,下面是配置的详细过程。 依赖包的版本: springboot 2.3.0.RELEASE jFinal ActiveRe
转换: https://blog.csdn.net/lycyingO/article/details/94369068 感谢neko提供的素材,非常感谢,让我知晓了这么美妙的框架。 脱离任何使用场景的比较,都是傻x行为。但我还是要当一回傻x,就当给新版本jfinal献礼了。 有一个项目,夹缝里求生存 。年年获取oschina最佳开源项目,那就是jfinAl。 Spring,这个老牌的框架,迎来
JFinal的ActiveRecordPlugin插件很棒,感觉吊打Mybatis,分享下。 Maven pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta
首先导入必须的jar包: <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>3.2</version> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal
不知道其他人有没有像我一样,工作一段时间后就想找个开源项目读读代码,可是大都时候又觉得无从下手,最近又整理了下,搭建spring源码阅读环境确实麻烦一些。先说下我的环境:操作系统:mac,开发ide:IDEA 准备工作:github账号,本地安装好git,maven,jdk8 首先是Jfinal比较简单些: 步骤: 1下载github上的源码 https://github.com/jfinal/j
在讲微信公众号开发之前,先来大概了解一下微信公众号。微信公众号大体上可以分为服务号和订阅号,订阅号和服务号的区别如下: 服务号可以申请微信支付功能。 服务号只能由企业申请,订阅号可以有企业或个人申请。 订阅号和服务号每月推送消息次数不同,订阅号每天可以推送一次,服务号每月可以推送四次。 服务号推送的消息会出现在用户的聊天列表中,而订阅号推送的消息显示在订阅号文件夹中。 还有一些其他接口功能的区别和
废话不说,直接上代码 新增cxf的plugin CXFPlugin package com.jfinal.plugin.spring; import org.apache.cxf.Bus; import org.apache.cxf.bus.spring.SpringBusFactory; import org.apache.cxf.transport.servlet.ServletTranspo
(本文不是讲解的简单demo 而说的是一个web项目中的操作) 准备工作: 1:: jar(我是通过maven引入的) 因为我的项目使用的是spring 4.3版本的 所以引入的spring-rabbit 为1.6.6 <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifa
最近在看jfinal框架,然后记录下自己上手的知识。 有点像天下武功,唯快不破,来试下enjoy模板引擎 简单高效 为什么使用Jfinal Enjoy作为前端页面渲染?简单高效 1.引入Enjoy <dependency> <groupId>com.jfinal</groupId> <artifactId>enjoy</artifactId> <version>4.5
spring中在跳转的jsp页面中用EL表达式获取数据时候,要加上isELIgnored="false",不然是不会解析EL表达式的,但是在就final就不需要 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page language="java" isELIgnored="false" impor
litongjava-dev-tools-file-sync 简介 [主要功能] 1.检测目录下的文件是否有变化,如果有变化通过ssh协议上传到linux [替代产品] idea的Tools-->Deployment [软件架构] jfinal+sqllite [用途] 检测到编译后的class文件变动,将class文件上传到linux服务器,linux服务器使用HotSwapWatcher检测的
主要内容:使用MATLAB找到不确定的积分,使用MATLAB查找定积分整合(或也叫作集成)涉及两种本质上不同类型的问题。 第一种类型问题是给出了函数的导数,并且想要找到该函数。所以基本上扭转了差异化的过程。 这种反向过程被称为抗分化,或者找到原始函数,或者找到不确定的积分。 第二种类型问题是涉及相当多的非常小的数量,然后随着数量的大小接近于零,而术语的数量趋向于无穷大。这个过程导致了定积分的定义。 确定的积分用于查找区域,体积,重心,转动惯量,由力完成的工作以及许多
我们的应用程序中存在以下问题。消息通过入站通道适配器传入,并使用持久消息存储在聚合器中累积。一旦释放策略中定义的条件返回true,消息将被发送到处理的下一阶段。如果在下一个处理阶段抛出异常,事务将回滚,消息将再次放入持久消息存储中。但是,事务不会将消息放回原始队列,因为消息一旦放在聚合器中就会被确认。这不是我们想要的。理想情况下,如果在处理聚合器已批处理的其中一条下游消息时发生异常,则事务只会回滚
我想使用聚合器从两条消息中创建一条消息,但我不知道如何做到这一点。 目前,我正在从一个目录中读取两个文件,并希望将这些消息聚合为一个。 我的整个项目是这样的: 读入。拉链- 如果我可以在解压缩文件后发送一条包含两个有效负载的消息,那就太好了,但在读取后聚合就足够了。 我的拉链看起来像这样: 它将这些文件放入两个目录中,我使用FileReadingMessageSource再次从中读取它们。我还想只
当执行上面的代码时,将发生回滚,并且“Hibernate操作”将被回滚,但在TaskService.Complete中执行的操作不会被回滚。 我已经调试了Camunda代码,一切似乎都正常,我找到了一个SpringTransactionInterceptor,命令在中执行,此时事务处于活动状态。
我目前在Spring集成中处理JMS事务时遇到困难。我正在创建的集成流程如下所示: JMS队列A- 我希望在JMS队列B和JMS队列C上保证消息的传递。然而,为了使传递稍微困难一些,我希望将导致错误的消息存储在单独的JMQ队列上,并在队列a上确认消息。 但是,如果我对此进行测试并在队列C上设置消息之前抛出错误(让我们假设队列B首先完成,队列C其次完成),事务将确认队列A并在队列B和错误队列上提交消
整数集合(intset)用于有序、无重复地保存多个整数值, 根据元素的值, 自动选择该用什么长度的整数类型来保存元素。 举个例子, 如果在一个 intset 里面, 最长的元素可以用 int16_t 类型来保存, 那么这个 intset 的所有元素都以 int16_t 类型来保存。 另一方面, 如果有一个新元素要加入到这个 intset , 并且这个元素不能用 int16_t 类型来保存 —— 比
针对Fescar 相信很多开发者已经对他并不陌生,当然Fescar 已经成为了过去时,为什么说它是过去时,因为Fescar 已经华丽的变身为Seata。如果还不知道Seata 的朋友,请登录下面网址查看。 SEATA GITHUB:[https://github.com/seata/seata] 对于阿里各位同学的前仆后继,给我们广大开发者带来很多开源软件,在这里对他们表示真挚的感谢与问候。 今天
在我的用例中,最简单的集成组件安排是什么: 接收来自多个来源和多种格式的消息(所有消息都是JSON序列化对象)。 将消息存储在缓冲区中最多10秒(聚合) 通过不同的类属性getter(例如class1.someId(),class2.otherId(),...) 释放所有分组的消息并转换为新的聚合消息。 到目前为止(第1点和第2点),我正在使用聚合器,但不知道3)处的问题是否有现成的解决方案或者我