Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/a252937166/quick-spring
在main方法中快速使用spring的bean
https://github.com/a252937166/quick-spring
ouyanglol quickstart spring
Last synced: about 1 month ago
JSON representation
在main方法中快速使用spring的bean
- Host: GitHub
- URL: https://github.com/a252937166/quick-spring
- Owner: a252937166
- Created: 2018-01-29T08:45:17.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-09-17T04:56:05.000Z (about 6 years ago)
- Last Synced: 2024-10-01T16:18:48.281Z (about 2 months ago)
- Topics: ouyanglol, quickstart, spring
- Language: Java
- Size: 27.3 KB
- Stars: 2
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
![Jenkins](https://img.shields.io/jenkins/s/https/jenkins.qa.ubuntu.com/view/Precise/view/All%20Precise/job/precise-desktop-amd64_default.svg?style=plastic)
# 框架介绍
## 功能
让普通非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
# 使用介绍
## 测试项目目录结构
![这里写图片描述](https://qiniu.ouyanglol.com/blog/Quick%20Spring%E2%80%94%E2%80%94%E4%B8%80%E6%AC%BE%E5%9C%A8main%E6%96%B9%E6%B3%95%E4%B8%AD%E4%BD%BF%E7%94%A8spring%E8%AF%AD%E6%B3%95%E7%9A%84%E6%95%8F%E6%8D%B7%E6%A1%86%E6%9E%B61.png)
**图(1)**
## 导入maven
如何创建maven项目就不多介绍了,不懂得同学可以看一下[idea如何创建maven项目(一)](http://blog.csdn.net/mr_ooo/article/details/53871828),超简单的。
### maven地址:
```
com.ouyanglol
quick-spring
1.0
```![这里写图片描述](https://qiniu.ouyanglol.com/blog/Quick%20Spring%E2%80%94%E2%80%94%E4%B8%80%E6%AC%BE%E5%9C%A8main%E6%96%B9%E6%B3%95%E4%B8%AD%E4%BD%BF%E7%94%A8spring%E8%AF%AD%E6%B3%95%E7%9A%84%E6%95%8F%E6%8D%B7%E6%A1%86%E6%9E%B62.png)
**图(2)**
## 配置文件`Quick Spring`会扫描`resource`下以`quick-`开头的`xml`文件,默认为`spring`的配置文件,配置语法和普通`spring`配置一样,我这里提供简单模板,需要个性化配置的,可以自己改。
### quick-applicationContext.xml
```
classpath:mapper/*.xml
```
其中``,``和``大家根据自己项目路径自己改一下。### 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=123456druid.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.java
```
package 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.java
```
package 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.java
```
package 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对线。## 测试结果
![这里写图片描述](https://qiniu.ouyanglol.com/blog/Quick%20Spring%E2%80%94%E2%80%94%E4%B8%80%E6%AC%BE%E5%9C%A8main%E6%96%B9%E6%B3%95%E4%B8%AD%E4%BD%BF%E7%94%A8spring%E8%AF%AD%E6%B3%95%E7%9A%84%E6%95%8F%E6%8D%B7%E6%A1%86%E6%9E%B63.png)
**图(3)**
很明显,`logger`和`mybatis`都成功使用了。