[置顶] Quick Spring——一款在main方法中使用spring语法的敏捷框架
2018-01-31 18:21
381 查看
框架介绍
功能
设计思路
源码地址
使用介绍
测试项目目录结构
导入maven
maven地址
配置文件
quick-applicationContextxml
log4jproperties
applicationproperties
启动类
Server类
main方法启动
测试结果
它使普通项目与
图(1)
图(2)
其中
我顺便把日志也整合了,日志我用的是
其中日志的输出路径,大家可以根据自己的需求修改一下。
统一记录配置信息。
我个人建议启动类都放在
TestQuick.java(自定义
从项目路径可以看到,该文件在
其中
生成工具(实现中文注释)地址:https://github.com/a252937166/mybatis-generator-core-1.3.2
首先使用
这个方法获取启动类,其中
这个方法可以单独获取spring的bean对线。
图(3)
很明显,
功能
设计思路
源码地址
使用介绍
测试项目目录结构
导入maven
maven地址
配置文件
quick-applicationContextxml
log4jproperties
applicationproperties
启动类
Server类
main方法启动
测试结果
框架介绍
功能
让普通非web项目在使用main方法启动的时候,也能随意使用
spring的
@Service,
@Autowired等语法,同时该项目整合了
mybatis,方便了普通非web项目对数据库的操作。
设计思路
我在研究爬虫框架的时候,发现大多是爬虫框架都是通过main方法启动的,因为它们并不需要
web容器,所以为了轻量级,都避开了与
springMVC的整合。但是我个人习惯了
spring的语法,同时并不喜欢原生
JdbcTemplate的操作,更喜欢
mybatis,所以设计了
Quick Spring。
它使普通项目与
spring的
spring-core和
spring-context两个模块简单整合,同时使用
mybatis,方便了对数据库的操作。
源码地址
https://github.com/a252937166/quick-spring使用介绍
测试项目目录结构
图(1)
导入maven
如何创建maven项目就不多介绍了,不懂得同学可以看一下idea如何创建maven项目(一),超简单的。maven地址:
<dependency> <groupId>com.ouyanglol</groupId> <artifactId>quick-spring</artifactId> <version>1.0</version> </dependency>
图(2)
配置文件
Quick Spring会扫描
resource下以
quick-开头的
xml文件,默认为
spring的配置文件,配置语法和普通
spring配置一样,我这里提供简单模板,需要个性化配置的,可以自己改。
quick-applicationContext.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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--选择最流行的druid连接池--> <bean id="mybatisDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${database.driverClassName}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> <!-- 初始化连接数量 --> <property name="initialSize" value="${druid.initialSize}" /> <!-- 最小空闲连接数 --> <property name="minIdle" value="${druid.minIdle}" /> <!-- 最大并发连接数 --> <property name="maxActive" value="${druid.maxActive}" /> <!-- 配置获取连接等待超时的时间 --> <property name="maxWait" value="${druid.maxWait}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" /> <property name="validationQuery" value="${druid.validationQuery}" /> <property name="testWhileIdle" value="${druid.testWhileIdle}" /> <property name="testOnBorrow" value="${druid.testOnBorrow}" /> <property name="testOnReturn" value="${druid.testOnReturn}" /> <!-- 打开PSCache,并且指定每个连接上PSCache的大小 如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。 --> <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" /> <!-- 配置监控统计拦截的filters --> <property name="filters" value="${druid.filters}" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="mybatisDataSource"/> <property name="mapperLocations"> <list> <value>classpath:mapper/*.xml</value> </list> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ouyang.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> <!--选择自动扫描路径--> <context:component-scan base-package="com.ouyang"/> <!--选择配置文件--> <context:property-placeholder location="classpath:application.properties" /> </beans>
其中
<context:component-scan base-package="com.ouyang"/>,
<property name="basePackage" value="com.ouyang.dao"/>和
<context:property-placeholder location="classpath:application.properties" />大家根据自己项目路径自己改一下。
log4j.properties
log4j.rootLogger=DEBUG,stdout,D,E,I ### 输出到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r:%L] - [%p] %m%n ### 输出到日志文件 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = /data/log/quick.debug.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n ### 输出到日志文件 ### log4j.appender.I = org.apache.log4j.DailyRollingFileAppender log4j.appender.I.File = /data/log/quick.info.log log4j.appender.I.Append = true log4j.appender.I.Threshold = INFO log4j.appender.I.layout = org.apache.log4j.PatternLayout log4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n ### 保存异常信息到单独文件 ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File = /data/log/quick.error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n
我顺便把日志也整合了,日志我用的是
slf4j整合
log4j,也是当下最流行的选择,使用方法很简单,等下java代码里简单介绍一下。
其中日志的输出路径,大家可以根据自己的需求修改一下。
application.properties
database.driverClassName=com.mysql.cj.jdbc.Driver database.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&useSSL=false database.username=mysql database.password=123456 druid.initialSize=10 druid.minIdle=6 druid.maxActive=50 druid.maxWait=60000 druid.timeBetweenEvictionRunsMillis=60000 druid.minEvictableIdleTimeMillis=300000 druid.validationQuery=SELECT 1 druid.testWhileIdle=true druid.testOnBorrow=false druid.testOnReturn=false druid.poolPreparedStatements=false druid.maxPoolPreparedStatementPerConnectionSize=20 druid.filters=wall,stat
统一记录配置信息。
启动类
MyQuick.javapackage com.ouyang.quick; import com.ouyang.service.TestService; import com.ouyanglol.annotation.QuickSpring; import org.springframework.beans.factory.annotation.Autowired; /** * Package: com.ouyang.quick * * @Author: Ouyang * @Date: 2018/1/29 */ @QuickSpring public class MyQuick { @Autowired TestService testService; public void test() { testService.test(); System.out.println("MyQuick"); } }
我个人建议启动类都放在
quick的包路径下(当然也可以自定义),只需要加上
@QuickSpring注释就行了,启动类中可以随意使用
spring注释,
name默认为类名,当然可以可自己修改。
TestQuick.java(自定义
name和包路径)
从项目路径可以看到,该文件在
com.ouyang.test包路径下。
package com.ouyang.test; import com.ouyang.model.Test; import com.ouyang.service.TestService; import com.ouyanglol.annotation.QuickSpring; import org.springframework.beans.factory.annotation.Autowired; /** * Package: com.ouyang.test * * @Author: Ouyang * @Date: 2018/1/29 */ @QuickSpring(name = "myTest") public class TestQuick { @Autowired TestService testService; public void test() { testService.test(); System.out.println("TestQuick"); } public void update(Test test) { testService.update(test); } }
Server类
TestServer.javapackage com.ouyang.service; import com.ouyang.dao.TestMapper; import com.ouyang.model.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * Package: com.ouyang.service * * @Author: Ouyang * @Date: 2018/1/26 */ @Service public class TestService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired TestMapper testMapper; public void test() { logger.info("这是{}方法","test()"); System.out.println("test Service"); } public void find(Integer id) { logger.info("这是{}方法","find()"); Test test = testMapper.selectByPrimaryKey(id); System.out.println(test.getText()); } public void update(Test test) { testMapper.updateByPrimaryKeySelective(test); } }
其中
logger是典型的
slf4j框架的使用方法,
testMapper是
mybatis的mapper,mapper的代码就没必要贴出来了,需要使用
mybatis的自己使用工具生成就是了。
生成工具(实现中文注释)地址:https://github.com/a252937166/mybatis-generator-core-1.3.2
main方法启动
App.javapackage com.ouyang; import com.ouyang.model.Test; import com.ouyang.quick.MyQuick; import com.ouyang.service.TestService; import com.ouyang.test.TestQuick; import com.ouyanglol.core.QuickBase; /** * Hello world! * */ public class App { public static void main( String[] args ) { QuickBase quickBase = QuickBase.getInstance();//初始化quick包下的启动类 MyQuick quick = (MyQuick) quickBase.getQuick("MyQuick"); quick.test(); QuickBase quickBase1 = QuickBase.getInstance("test");//初始化test包下的启动类 TestQuick quick1 = (TestQuick) quickBase1.getQuick("myTest"); quick1.test(); TestService testService = (TestService) quickBase.getBean("testService"); testService.test(); testService.find(1); testService.find(2); testService.find(3); testService.find(4); } }
首先使用
QuickBase quickBase = QuickBase.getInstance();初始化需要使用的启动类,如果不是在
quick包下,需要手动填入包名。
quickBase.getQuick();
这个方法获取启动类,其中
myTest与
@QuickSpring(name = "myTest")中的
name对应,不填
name就默认是类名。获取之后就是随意调用方法了。直接启动
main方法就能使用了。
quickBase.getBean("testService")
这个方法可以单独获取spring的bean对线。
测试结果
图(3)
很明显,
logger和
mybatis都成功使用了。
相关文章推荐
- ssm框架中 ,服务器启动开启线程,线程中使用添加了spring注解类中的方法
- [置顶] 通用的DAO查询,常见方法集合,没有使用Spring
- [置顶] Picasso框架的基本使用方法
- dubbo框架中Main方法运行spring容器
- dubbo框架中Main方法运行spring容器
- 一款炫酷的幻灯片播放框架介绍(附demo及使用方法)
- [置顶] 使用IDEA基于springboot开发ssm框架(undertow代替tomcat以及其他功能)
- dubbo框架中Main方法运行spring容器
- Myeclipse 使用最新Spring....或其他框架方法
- [置顶] XUtils3框架的基本使用方法(一)
- [置顶] dubbo 分布式框架,git版本控制,ida使用方法,maven项目管理
- [置顶] 【Android】Android开发之著名框架ButterKnife的使用详解,butterknife8.1.0版本的使用方法
- Spring Boot 简单使用EhCache缓存框架的方法
- [置顶] XUtils3框架的基本使用方法(二)
- [置顶] IDEA下利用Jrebel插件实现SpringBoot、JFinal;main方法【热加载】
- 使用SPRING AOP框架和EJB组件
- 为何不使用spring、struts2、easyjweb等开源框架
- 在Spring中使用replaced-method来进行方法替换
- 使用OleDbCommandBuilder时出现“Insert into 语句的语法错误”的解决方法
- Struts+Spring+Hibernate项目框架构建中的问题及解决方法集锦(2)