SpringBoot无XML配置
SpringBoot,自己研究了好几天,以前也是没有接触过这类的框架,不过原理吧,也就是那么些个原理,毕竟都是Spring开源下的子框架。
好了,回归正题,今天晚上研究了好久,写出来了无配置文件的javaConfig配置,Demo集成了SpringMvc + mybatis + boot ,里面也含有hibernate的core包,用来生成数据库表结构的。
首先 ,添加如下boot官方提供的依赖包:
1 <dependency>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-web</artifactId>
4 </dependency>
5 <dependency>
6 <groupId>org.mybatis.spring.boot</groupId>
7 <artifactId>mybatis-spring-boot-starter</artifactId>
8 <version>1.1.1</version>
9 </dependency>
10 <!-- jpa-->
11 <dependency>
12 <groupId>org.springframework.boot</groupId>
13 <artifactId>spring-boot-starter-data-jpa</artifactId>
14 <version>1.5.7.RELEASE</version>
15 </dependency>
上面的就是配置中所需要的架包,因为本demo体现的是无配置文件,所以demo里不会有什么配置文件(yaml除外)
我使用的数据源是阿里的Druid 另外还有分页的架包以及mybatis整合spring的架包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
jar包现在已经分配完毕(注意jar包的版本号,个人发现很多问题都出在了jar包冲突或者版本不一致的身上了)
本demo 演示的编辑工具是 IDEA 因为我创建的是springboot项目,所以编辑器会自动给我生成了application.yml
下来我贴上这个内容
server:
port: 8081
context-path: / #开启spring AOP配置
aop:
auto: true
proxy-target-class: true
# jpa 配置
# jpa:
# show-sql: true
## open-in-view: true
# hibernate:
# ddl-auto: update
#mybatis:
# type-aliases-package: com.example.model
# mapper-locations: classpath:mapper/*.xml
# configuration:
# use-new-id-generator-mappings:
注:数据源的配置也可以放在 yml文件里,也很方便,因为本demo演示的是在javaConfig里面配置,所以就没有配置在yml里面。
下来创建配置文件(jdbc.properties以及 javaConfig )
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.user=root
jdbc.password=
#jdbc.driver=com.mysql.jdbc.Driver
jdbc.initialSize=5
jdbc.minIdle=1
jdbc.maxActive=10
jdbc.filters=stat
这和普通大多数项目的一样,可以粘过来!
现在,我来开始配置 数据源 以及 业务层配置
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties; /**
* 配置业务层
*/
@Configuration//配置的注解
@EnableTransactionManagement//事务管理的注解
@PropertySource("classpath:jdbc.properties")//属性扫描注解
public class SqlSessionFactoryConfig implements TransactionManagementConfigurer{
//创建全局数据源
protected DataSource dataSource;
//mybatis配置
private static String Mybatis_Config = "mybatis-config.xml";
//类的别名
private static String ALIASMODEL = "com.example.model";
//mapper 包的位置
private static String MAPPERPATH = "com.example.mapper";
//mapper.xml 编写sql的文件
private static String MAPPERXMLPATH = "mapper/*.xml";
private static String SQLSESSIONBEAN = "sqlSessionFactoryBean"; /**
* 配置数据源
先去jdbc.properties里扫描 然后进行配置
* @return
*/
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean(
@Value("${jdbc.url}")String url,
@Value("${jdbc.user}")String username,
@Value("${jdbc.password}")String password) {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
try {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
this.dataSource = dataSource;
sqlSessionFactory.setDataSource(dataSource);
//设置mybatis
sqlSessionFactory.setConfigLocation(new ClassPathResource(Mybatis_Config));
//设置模型类别名
sqlSessionFactory.setTypeAliasesPackage(ALIASMODEL);
//配置分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("dialect","mysql");
properties.setProperty("offsetAsPageNum","true");
properties.setProperty("rowBoundsWithCount","true");
properties.setProperty("pageSizeZero", "true");//分页尺寸为0时查询所有纪录不再执行分页
properties.setProperty("reasonable", "true");//页码<=0 查询第一页,页码>=总页数查询最后一页
properties.setProperty("supportMethodsArguments", "true");//支持通过 Mapper 接口参数来传递分页参数
pageHelper.setProperties(properties);
sqlSessionFactory.setPlugins(new Interceptor[]{pageHelper});
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//*.mapper.xml的地址(根据你的项目自行修改)
sqlSessionFactory.setMapperLocations(resolver.getResources(MAPPERXMLPATH));
//设置mapper sql文件的扫描路径
return sqlSessionFactory.getObject(); } catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 配置数据模板
* @param sqlSessionFactory
* @return
*/
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
} /**
* Spring整合Mapper
* @return
*/
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName(SQLSESSIONBEAN);
//*.mapper(*.dao)的包名(根据你的项目自行修改)
mapperScannerConfigurer.setBasePackage(MAPPERPATH);
//配置通用Mapper,详情请查阅官方文档
Properties properties = new Properties();
//tk.mybatis.mapper.common.Mapper
properties.setProperty("mappers", "tk.mybatis.mapper.common.Mapper");
properties.setProperty("notEmpty", "false");//insert、update是否判断字符串类型!='' 即 test="str != null"表达式内是否追加 and str != ''
//使用的数据库类型名称(MySQL,Oracle,Postgresql...)
properties.setProperty("IDENTITY", "MySQL");//
mapperScannerConfigurer.setProperties(properties); return mapperScannerConfigurer;
}
/**
* 事务的控制管理 将数据源注入事务内
* @return
*/
@Override public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(dataSource); } }
好了,业务层的配置完了,简单吧!!!
嘿嘿嘿,其实这个和spring的applicationContext.xml配置完全是一样的,我们都知道 Spring最大的特性就是 IOC和AOP,因此只需要将以前配置的bean的class拿到,然后用bean的特定实现类进行set其配置就哦了!!!
web Controller层也是一样的。
无非是照猫画虎,照鸡画猴
下来,我直接贴代码吧!
import java.util.ArrayList;
import java.util.List; @Configuration
public class WebMvcConfig {
//配置视图解析器
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/view/");
resolver.setSuffix(".ftl");
resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
return resolver;
}
//上传文件配置
@Bean(name = "multipartResolver")
public CommonsFileUploadSupport commonsFileUploadSupport(){
CommonsFileUploadSupport resolver = new CommonsMultipartResolver();
resolver.setMaxInMemorySize(40960);
resolver.setMaxUploadSize(10485760000L);
return resolver;
}
//异常解析拦截器 过滤
@Bean
public HandlerInterceptor interceptor(){
HandlerInterceptor interceptor = new ExceptionInterceptor();
List<MappedInterceptor> interceptors = new ArrayList<>();
MappedInterceptor mappedInterceptor = new MappedInterceptor(new String []{
"/js/**","/image/**","/uplaod/**","/**/*.jpeg","/**/*.jpg"
,"/**/*.gif","/**/*.svg","/**/*.html"
},interceptor);
interceptors.add(mappedInterceptor);
return interceptor;
}
}
有没有和SpringMVC的配置文件一样?
可以和以前的SpringMVC的配置来对比一下,下面我贴上SpringMVC的配置XML文件 大家来对比看看哈~~
<mvc:interceptors>
<mvc:interceptor>
<!-- 对所有的请求拦截使用/** ,对某个模块下的请求拦截使用:/myPath/* -->
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/**/*.html" />
<mvc:exclude-mapping path="/**/*.css" />
<mvc:exclude-mapping path="/**/*.js" />
<mvc:exclude-mapping path="/**/*.jpeg" />
<mvc:exclude-mapping path="/**/*.gif" />
<mvc:exclude-mapping path="/**/*.png" />
<mvc:exclude-mapping path="/**/*.eot" />
<mvc:exclude-mapping path="/**/*.otf" />
<mvc:exclude-mapping path="/**/*.svg" />
<mvc:exclude-mapping path="/**/*.ttf" />
<mvc:exclude-mapping path="/**/*.woff" />
<mvc:exclude-mapping path="/**/*.woff2" />
<ref bean="exceptionInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
<bean name="exceptionInterceptor" class="yf.wuchw.web.ExceptionInterceptor" />
<mvc:default-servlet-handler /> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760000"></property>
<property name="maxInMemorySize" value="40960"></property>
</bean>
<!--配置jsp显示ViewResolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp" />
<property name="suffix" value=".jsp" />
</bean>
有没有一种照鸡画猴的感觉,嘿嘿,至于其它的注解配置,都和Spring一样的。Controller 层 加上@Controller Service 加上@Service
注意:Mapper 层要加上 @Mapper
注:转载请注明出处;原文链接:http://www.cnblogs.com/ChoviWu/p/8180022.html
SpringBoot无XML配置的更多相关文章
- SpringBoot零XML配置的Spring Boot Application
Spring Boot 提供了一种统一的方式来管理应用的配置,允许开发人员使用属性properties文件.YAML 文件.环境变量和命令行参数来定义优先级不同的配置值.零XML配置的Spring B ...
- springboot中xml配置之@ImportResource
springboot中进行相关的配置往往有java配置和xml配置两种方式. 使用java的方式配置只需要使用@configuration注解即可,而使用xml的方式配置的话需要使用@ImportRe ...
- Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)
原理先不了解,只记录常用方法 用法: @EnableWebMvc 开启MVC配置,相当于 <?xml version="1.0" encoding="UTF-8&q ...
- 【JAVA】cxf使用springboot与xml配置的差别所导致的问题。
使用xml时使用以下配置使报文没有加上命名空间时也能正常访问接口.bean定义的前后顺序不影响程序正常注册对象. <!-- 通过Spring创建数据绑定的类 --> <bean id ...
- springmvc学习指南 之---第27篇 spring如何实现servlet3.0无web.xml 配置servlet对象的
writedby 张艳涛 基于web.xml配置,有人说麻烦,tomcat给按照servlet3.0,实现了基于注解@WebServlet,有人说springmvc的springmvc.xml配置麻烦 ...
- SpringBoot系列-整合Mybatis(XML配置方式)
目录 一.什么是 MyBatis? 二.整合方式 三.实战 四.测试 本文介绍下SpringBoot整合Mybatis(XML配置方式)的过程. 一.什么是 MyBatis? MyBatis 是一款优 ...
- SpringBoot—整合log4j2入门和log4j2.xml配置详解
关注微信公众号:CodingTechWork,一起学习进步. 引言 对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维.而日志的输出需要有一定的规划,如日志命名.日志大小,日志分 ...
- SpringBoot 整合 Mybatis + Mysql——XML配置方式
一.介绍 SpringBoot有两种方法与数据库建立连接,一种是集成Mybatis,另一种用JdbcTemplate,本文主要讨论集成Mybatis方式. SpringBoot整合Mybatis也有两 ...
- Springboot 日志管理配置logback-spring.xml
几种常见的日志 Log4j:是最早的日志框架,是apach旗下的,可以单独使用,也可配合日志框架JCL使用: Log4j2:apach旗下的关于log4j的升级版: Logback:是基于slf4j接 ...
随机推荐
- 笔记-python-built-in functions-eval,exec,compile
笔记-python-built-in functions-eval,exec,compile 1. python代码执行函数 有时需要动态改变代码,也就是说代码需要是字符串格式,然后在按需要 ...
- TensorFlow验证码识别
本节我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里我们识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 验 ...
- 用for循环计算(1-3+5-7...99)的结果(两种方法)
1) sum=0 count=1 for i in range(1,100,2): if count % 2==0: sum = sum - i else: sum = sum + i count = ...
- java 值传递 和 引用传递
参考:(http://www.cnblogs.com/woshimrf/p/5263018.html) 参考:(http://www.cnblogs.com/binyue/p/3862276.html ...
- 《Cracking the Coding Interview》——第12章:测试——题目2
2014-04-24 23:15 题目:你有一段程序,运行了十次每次都在不同的地方崩掉了.已知这段程序只用了标准C或C++库函数,请问有什么思路来找出问题所在. 解法:1. 时间戳每次都不同.2. 随 ...
- 《Cracking the Coding Interview》——第7章:数学和概率论——题目3
2014-03-20 02:05 题目:给定笛卡尔二维平面上两条直线,判断它们是否相交. 解法:相交.重合.平行. 代码: // 7.3 Given two lines on the Cartesia ...
- 就算WORD高手也无法解释的Word的一些疑惑.,一些已经解决,一些没有解决
如下功能如何用? 1.选项->保存->显示其他保存位置(即使可能需要登录)? 解答:您能告诉我吗? 2.字体->为字体调整字间距? 解答:自动调整某些字符之前的距离,使得更加美观.例 ...
- shell监控脚本
序言: 前几天一好友问我服务器监控怎么做?你们公司的监控是怎么做的?有什么开源的监控软件推荐?常见的开源的监控软件当然首先推荐ZABBIX,分布式够强大,而且很多公司都在用,我问他具体什么需求,能监控 ...
- Lua1
使用lua进行脚本编程有很多优点: 1 代码体积小 2 执行速度快 3 安全性较高等 4 但是最大的优点是修改后的代码不需要重新编译即可生效,而高级语言的代码经过修改后需要经过重新编译或者解释后才能生 ...
- 深入理解synchronize
本文参考引用,本人整理个人理解.地址点击 1.实现原理 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性. 下面是一些 ...