摘要:通过整合及可以实现数据库查询后将数据持久化。但是可能出现幻像读这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
所需技术:spring、mybatis、druid、flyway、logback、nodejs、html、css3 ;
目标:创建一个业务框架,后端采用spring+mybatis,中间层采用node,前端html5,css3等;
工程建成后目录如下:
整合步骤:1、创建maven工程,添加所有目标依赖;
2、创建spring目录,创建spring基础配置;
3、整合mybatis、durid、flyway;
4、整合logback工具;
5、添加测试类,测试通过,第一阶段完成;
1、创建一个新的工程soyann,添加business模块,目录结构如下;
2、添加所有模块所需要的依赖,补全pom.xml
4.0.0
com.soyann
Business
1.0-SNAPSHOT
war
Business Maven Webapp
http://maven.apache.org
1.2
4.12
1.1.2
5.1.39
1.7.21
1.1.0
3.4.1
1.1.7
4.2.0
1.2.33
4.3.0.RELEASE
5.0.3
3.4
1.2
1.3.0
1.0.3
1.8.6
3.3.1
1.3
1.0
junit
junit
${junit.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
jul-to-slf4j
${slf4j.version}
ch.qos.logback
logback-core
${logback.version}
ch.qos.logback
logback-classic
${logback.version}
org.slf4j
slf4j-api
commons-logging
commons-logging
${commons-logging.version}
org.logback-extensions
logback-ext-spring
0.1.4
org.apache.commons
commons-lang3
${commons-lang3.version}
org.apache.commons
commons-pool2
2.4.2
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-oxm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
org.aspectj
aspectjweaver
${aspectj.version}
org.aspectj
aspectjrt
${aspectj.version}
asm
asm
${asm.version}
org.hamcrest
hamcrest-core
${hamcrest.version}
aopalliance
aopalliance
${aopalliance.version}
org.mybatis
mybatis-spring
${mybatis-spring.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis.generator
mybatis-generator-core
1.3.5
jar
test
org.mybatis.caches
mybatis-ehcache
${mybatis-ehcache.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
org.flywaydb
flyway-core
${flywaydb.version}
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid
${druid.version}
com.alibaba
fastjson
${fastjson.version}
jstl
jstl
${jstl.version}
taglibs
standard
${taglibs.version}
Business
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.5
mysql
mysql-connector-java
${mysql.version}
true
true
org.apache.maven.plugins
maven-compiler-plugin
1.6
1.6
二、创建spring配置项
1、创建spring-applicationContest.xml,作为spring配置的根文件。在添加其它模块前,创建一个根配置,作为各模块的公共配置项;
2、根配置的内容如下,后期随着添加各个模块,将会作相应的改动。
三、整合mybatis,druid,flyway工具
1、druid是阿里巴巴的数据库连接池。flyway为数据库版本管理工具。通过整合mybatis、druid及flyway,可以实现数据库查询后将数据持久化。接下来按顺序一个个文件添加进来。
2、添加spring-flyway.xml文件,配置如下:
这里需要注意的是,
3、添加jdbc.properties文件,配置如下:
#数据库驱动
jdbc.driver=com.mysql.jdbc.Driver
#数据库连接url
jdbc.url=jdbc:mysql://127.0.0.1:3306/soyann?relaxAutoCommit=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&failOverReadOnly=false
#数据库连接用户名
jdbc.username=root
#数据库连接密码
jdbc.password=AXUE+dhMhCrtVF1usq8EB7bv4kBhkv6n81KtiG9HRnPEoQjWsPax84mMFAQONb3ireEifDcFFxdRnrZYomc3pA==
#配置数据库密码是否需要解密,这里需要注意druid 1.0.16版本及以上的解密时需要同时配置publicKey,配置方式如下
druid.connectionProperties=config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALBt81XVN/W8vchTvUPwUD6NLk9LpwRRhY/+TQvkvM1hZIpzX1+SB1JLjcWcIwu4AkELau0pyjJ4LfC0LoOA/q0CAwEAAQ==
#配置初始化大小、最小、最大
druid.initialSize=10
#最小连接池数量
druid.minIdle=10
#最大连接池数量
druid.maxActive=50
#获取连接时最大等待时间,单位毫秒
druid.maxWait=5000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒,有两个含义:1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接;2) testWhileIdle的判断依据
druid.timeBetweenEvictionRunsMillis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
druid.minEvictableIdleTimeMillis=300000
#验证语句
druid.validationQuery=SELECT "x"
#检测连接是否有效的超时时间,单位:秒。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
druid.validationQueryTimeout=5
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
druid.testOnBorrow=false
#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
druid.testOnReturn=false
#建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
druid.testWhileIdle=true
#打开PSCache,并且指定每个连接上PSCache的大小,如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false
druid.poolPreparedStatements=false
druid.maxPoolPreparedStatementPerConnectionSize=100
#定期把监控数据输出到日志中
druid.timeBetweenLogStatsMillis=300000
#配置监控统计拦截的filters
druid.filters=config,stat,slf4j
#使用全局监控
druid.useGlobalDataSourceStat=true
#对于长时间不使用的连接强制关闭,禁用此配置,设置为false
druid.removeAbandoned=false
#超过30分钟开始关闭空闲连接
druid.removeAbandonedTimeout=1800
#将当前关闭动作记录到日志
druid.logAbandoned=true
这里采用了数据库连接密码加密功能,怎样生成连接加密下面再分解。
4、添加实体文件。在Resource根目录下,添加generatorConfig.xml配置,自动生成实体文件,内容如下:
接下来在idea中添加启动命令:
添加此配置的作用是自动生成数据表实体跟mapper文件,无须手写容易出错。运行命令,将生成的实体文件添加到对应目录下:
5、添加spring-mybatis.xml文件
com.soyann.business.*.service.*
com.soyann.business.*.mapper.*
添加文件后,发现还有点问题,spring-flyway.xml及spring-mybatis.xml不能相互调用,且往下。
6、更新spring-applicationContext.xml文件,引用spring-flyway.xml、spring-mybatis.xml、jdbc.properties配置
classpath:jdbc.properties
7、添加web.xml文件,配置数据库连接池等内容:
org.springframework.web.context.request.RequestContextListener
webAppRootKey
Business.root
DruidWebStatFilter
com.alibaba.druid.support.http.WebStatFilter
exclusions
*. js ,*. gif ,*. jpg ,*. png ,*. css ,*. ico ,/ druid /*
DruidWebStatFilter
/*
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
DruidStatView
/druid/*
8、在IDEA工具中引入spring及web文件
四、整合logback工具1、在resource目录下添加logback.xml,内容如下;
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %msg%n
UTF-8
ERROR
ACCEPT
DENY
${FILE_DIR}/%d{yyyy-MM-dd}/${FILE_NAME}_error.log
${maxHistory}
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
WARN
ACCEPT
DENY
${FILE_DIR}/%d{yyyy-MM-dd}/${FILE_NAME}_warn-log.log
${maxHistory}
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
${FILE_DIR}/${FILE_NAME}.log
${FILE_DIR}/${FILE_NAME}.%d{yyyyMMdd}.%i.log
50MB
30
%d{HH:mm:ss} [%thread] %-5level %logger{0} - %msg%n
UTF-8
INFO
${FILE_DIR}/${FILE_NAME}_debug.log
${FILE_DIR}/${FILE_NAME}_debug.%d{yyyyMMdd}.%i.log
50MB
30
%d{HH:mm:ss} [%thread] %-5level %logger{0} - %msg%n
UTF-8
DEBUG
ACCEPT
DENY
0
512
5000
TRACE
ACCEPT
DENY
${FILE_DIR}/%d{yyyy-MM-dd}/${FILE_NAME}_trace-log.log
${maxHistory}
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
2、web.xml中注册logback:
contextConfigLocation
classpath:spring/spring-applicationContext.xml
logbackConfigLocation
classpath:logback.xml
ch.qos.logback.ext.spring.web.LogbackConfigListener
org.springframework.web.context.ContextLoaderListener
到这里,spring+mybatis框架整合基本完成,下面就来测试下这个框架吧。
五、框架测试1、resource/db/migration添加数据库脚本;这里我用了别人创建好的,不再贴代码;
2、在service目录下添加一个接口及实现类,代码如下:
IUserService.java
package com.soyann.business.user.service;
import com.soyann.business.user.model.UserEntity;
import java.util.List;
/**
* @ProjectName: soyann
* @FileName: com.soyann.business.user.service
* @Description: (do what)
* @Copyright: Copyright(C) 2016-2017 All rights Reserved
* @Company: ShenZhen Information Technology Co.,LTD.
* @Author: dell657 neil
* @Version V1.0
* @Date: 2017/10/28
*
* Modification History:
* Date Author Version Discription
* -----------------------------------------------------------------------------------
* 2017/10/28 neil 1.0 1.0
* Why & What is modified: <修改原因描述>
*/
public interface IUserService {
UserEntity getUserById(int userId);
List getAllUser();
}
UserServiceImpl.java
package com.soyann.business.user.service.impl;
import com.soyann.business.user.mapper.UserMapper;
import com.soyann.business.user.model.UserEntity;
import com.soyann.business.user.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @ProjectName: soyann
* @FileName: com.soyann.business.user.service.impl
* @Description: (do what)
* @Copyright: Copyright(C) 2016-2017 All rights Reserved
* @Company: ShenZhen Information Technology Co.,LTD.
* @Author: dell657 neil
* @Version V1.0
* @Date: 2017/10/28
*
* Modification History:
* Date Author Version Discription
* -----------------------------------------------------------------------------------
* 2017/10/28 neil 1.0 1.0
* Why & What is modified: <修改原因描述>
*/
@Service("userService")
public class UserServiceImpl implements IUserService {
@Autowired(required=false)
private UserMapper userMapper;
@Override
public UserEntity getUserById(int userId) {
return userMapper.selectByPrimaryKey(userId);
}
@Override
public List getAllUser() {
return userMapper.getAllUser();
}
}
3、在test目录下添加测试类TestMyBatis.java,代码如下:
package com.soyann.business.mybatis;
import com.alibaba.fastjson.JSON;
import com.soyann.business.user.model.UserEntity;
import com.soyann.business.user.service.IUserService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
/**
* @ProjectName: soyann
* @FileName: com.soyann.business.mybatis
* @Description: (do what)
* @Copyright: Copyright(C) 2016-2017 All rights Reserved
* @Company: ShenZhen Information Technology Co.,LTD.
* @Author: neil
* @Version V1.0
* @Date: 2017/10/28
*
* Modification History:
* Date Author Version Discription
* -----------------------------------------------------------------------------------
* 2017/10/28 neil 1.0 1.0
* Why & What is modified: <修改原因描述>
*/
//表示继承了SpringJUnit4ClassRunner类
/*@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/spring-applicationContext.xml"})*/
public class TestMyBatis {
private static Logger logger = LoggerFactory.getLogger(TestMyBatis.class);
@Resource
private IUserService userService = null;
@Before
public void before() {
//使用"spring.xml"和"spring-mybatis.xml"这两个配置文件创建Spring上下文
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"spring/spring-applicationContext.xml", "spring/spring-mybatis.xml"});
//从Spring容器中根据bean的id取出我们要使用的userService对象
userService = (IUserService) ac.getBean("userService");
}
@Test
public void test1() {
logger.info("任务开始执行...");
UserEntity userEntity = userService.getUserById(4);
// System.out.println(user.getUserName());
// logger.info("值:"+user.getUserName());
//System.out.println(JSON.toJSONString(userEntity));
logger.info(JSON.toJSONString(userEntity));
logger.info("任务执行结束");
logger.error("任务执行结束");
logger.debug("任务执行结束");
}
}
添加代码后,执行代码,查看控制台输出结果。
输出结果正确,证明本框架已经初步整合。本文到这里结束
参考资料:传送门
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67919.html
相关文章
-
哪种Scale out架构能更有效满足分布式计算?
摘要:那么,的架构是否真的需要多台小计算量的节点来实现才是最完美的架构呢,让我们来细细剖析什么样的架构才能最有效的满足分布式计算的特点。近些年,随着分布式计算的越来越火热,Scale out分布式应用架构也如雨后春笋般不断涌现,大到Big Data平台架构,小到前端应用App的架构,似乎都要基于Scale out 的架构才算是与时俱进的先进架构。分布式架构的优势显而易见,一方面,Scale out...
-
【十年磨一剑】我们能从阿里架构师的身上学到什么?
摘要:正文本文是看到阿里巴巴系统架构师黄勇的采访记录有感而发,如有侵权,请联系我。下面就一起来看看阿里架构师的十年架构路。抱着这样的信心,我加入了易传媒,担任系统架构师职位。
showImg(https://segmentfault.com/img/remote/1460000016748965);
前言
做技术的,一定不能放弃技术。在精进技术的同时完善其他方面的能力,十年如一日。不忘初心,...
-
分布式软件架构整合(二)
摘要:续上篇所需技术等说明本编讲解一个分布式架构的整个流程,首先对上编中的工程作一些小小的改动,以支持接下来的实验。本篇中,定义了服务提供者,注册中心及客户端消费者三者关系。一服务提供者这里首先对服务端进行改造。
(续上篇)
所需技术:spring、mybatis、druid、flyway、logback、nodejs,zookeeper,dubbo,dubbo-admin等;说明:本编讲解...
-
数据中心需要一条25G新“跑道”
摘要:面向未来的战略设计,年开放网络战略升级,进入开放网络时代,基于软件定义数据中心提供全方位的解决方案,建立一个开放式的网络体系。开放网络需要性能更强的硬件平台在软件定义数据中心战略进程中,计算存储网络三者不可或缺,相互配合又相互影响。现在,企业应用进入云计算阶段,企业对IT架构虚拟化的需求越来越高,虚拟机的频繁创建需要网络自动快速来配置,同时网络安全隔离、多个数据中心之间的容灾,对网络提出了更...
-
云计算怎样影响网络基础架构?
摘要:在该阶段,云计算的网络基础架构如何结合新的趋势,更好地支撑云计算从试点到实用阶段的转型,显得尤为关键。对未来云计算网络架构的几点思考弹性网络易管理网络和开放的网络,这个需求的提出是适应未来云计算的支撑关键。
针对云计算的变革,文章分析云计算发展的几大趋势,阐述适应云计算的关键是要提供高弹性、高扩展性、易管理和开放的网络,并建议未来理想的云计算网络架构应是一个无阻塞、可自愈、即插即用的黑盒网络...
发表评论
0条评论
mochixuan
男|高级讲师
TA的文章
阅读更多
tensorflow
阅读 1697·2023-04-26 02:50
gpu版本的tensorflow
阅读 3683·2023-04-26 00:28
tensorflow怎么安装
阅读 2063·2023-04-25 15:18
#黑五#TmhHost:1核/1G/10Mbps/日本CN2/季付200元,充值送10%,洛杉矶99
阅读 3340·2021-11-24 10:31
CSS像素(css pixel)及像素单位 例如px pt em
阅读 1136·2019-08-30 13:00
DOM3中的自定义事件
阅读 1122·2019-08-29 15:19
前端学习资源
阅读 1885·2019-08-29 13:09
vue组件之间的通信
阅读 3095·2019-08-29 13:06
阅读需要支付1元查看