springboot

官网:http://www.springsource.org/
下载:http://repo.spring.io/release/org/springframework/boot/

Eclipse的Spring插件:
springsource-tool-suite-3.9.x.RELEASE-e4.x.x-updatesite
或者直接下载集成插件的Eclipse:(https://spring.io/tools3/sts/legacy)
spring-tool-suite-3.9.x.RELEASE-e4.x.x-win32-x86_64

一、Spring4+和Spring boot都推荐使用java配置的方式(零配置)

Java配置方式主要是通过 @Configuration 和 @Bean 这两个注解实现的:
1、@Configuration 作用于类上,相当于一个xml配置文件,可理解为spring的xml里面的标签;
2、@Bean 作用于方法上,相当于xml配置中的;
3、@ComponentScan(basePackages=“com.cssl”) 扫描包
4、@PropertySource(value=“classpath:mysql.properties”)|@Value读取配置文件
5、@EnableTransactionManagement 开启事务支持

二、SpringBoot入门
SpringBoot2 基于 Java 8,支持 Java 9,Maven 3.2+
SpringBoot2 针对Quartz调度器提供了支持。
SpringBoot2 基于Spring5构建,本次SpringBoot的升级,同时也升级了部分其依赖的第三方组件
主要的几个有:
Tomcat 8.5
Flyway 5 数据库版本控制 svn|git
Hibernate 5.2 ORM框架
Thymeleaf 3 模板引擎
对响应式应用更好的支持

SpringBoot:解决Java开发繁多的配置,低下的开发效率、复杂的部署流程及很难集成第三方技术
优点:
1、快速构建项目
2、对主流开发框架无配置集成
3、独立运行,无需依赖外部容器
4、极大提高开发、部署效率
5、与云计算等的天然集成
6、SpringCloud天然搭档

Maven配置:
1、设置spring boot的parent:包含了大量默认的配置,大大简化了我们的开发

org.springframework.boot
spring-boot-starter-parent
2.x.x.RELEASE

2.x.x必须jdk1.8+

<java.version>1.8</java.version>

2、导入spring boot的支持:核心SpringBoot starter,包括自动配置支持,日志和YAML
(可选:可以通过spring-boot-starter-web传递依赖)

org.springframework.boot
spring-boot-starter

3、导入spring boot的web支持:包括Tomcat、spring-webmvc,还自动依赖spring-boot-starter

org.springframework.boot
spring-boot-starter-web

4、添加Spring boot的插件:(可选:可以通过插件启动程序)

org.springframework.boot
spring-boot-maven-plugin

5、添加打war包插件:(可选:可以将项目打成war包发布)

maven-war-plugin
3.0.0

6、添加Spring boot对jsp|jstl的支持:(可选)
由于Spring boot使用的内嵌的tomcat,而内嵌的tomcat是不支持jsp页面的,需要导入额外的包才能解决

org.apache.tomcat.embed tomcat-embed-jasper javax.servlet jstl 注意:控制器没有'.action'页面也不能加

@SpringBootTest:SpringBoot的测试注解
@SpringBootApplication:SpringBoot的核心注解,主要目的是开启自动配置,扫描本包及其子包bean
@ConditionalOnXxx:条件注解

@SpringBootApplication注解组合了以下注解:
1、@SpringBootConfiguration:默认扫描@SpringBootApplication所在类的同级目录以及它的子目录
2、@EnableAutoConfiguration:启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项,如:我们添加了spring-boot-starter-web的依赖,项目就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC
3、@ComponentScan:扫描包

如果想关闭某个自动配置:
@SpringBootApplication(exclude=RedisAutoConfiguration.class)

启动SpringBoot:SpringApplication.run(MainApplication.class, args);
注意:主类必须放在包中,不能直接放java目录,否则异常

自定义Banner:
1、拷贝生成的字符到一个文本文件中,并且将该文件命名为banner.txt
2、将banner.txt拷贝到项目的resources目录中
3、如果不想看到任何的banner,也是可以将其关闭的:setBannerMode(Banner.Mode.OFF)

全局配置文件:
Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下

访问静态资源:进入规则为 /
如果进入SpringMVC的规则为/时,Spring Boot的默认静态资源的路径为:
classpath:/META-INF/resources/,classpath:/resources/,
classpath:/static/,classpath:/public/

也可以通过Spring指定:
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/templates/,classpath:/META-NF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

注意:
1、指定后默认的就失效了
2、配置了templates则可以直接访问模板文件,否则只能通过controller转发
3、templates下的模板也可以链接static下的css、js等静态资源,反之也可以
4、无论什么时候都不能重定向访问模板文件,因为重定向不使用模板视图解析器
5、没有配置视图解析有时候报post请求不支持?(bug)

热部署(修改代码自动部署)
导入依赖

org.springframework.boot
spring-boot-devtools

修改idea设置(见设置文档)

三、SpringBoot和Mybatis整合的两种方式:

第一种:使用mybatis-spring整合的方式,也就是我们传统的方式
优点:我们可以手动控制MyBatis的各种配置

导入依赖

org.mybatis
mybatis
3.5.1


org.mybatis
mybatis-spring
2.0.1

使用lombok:(jdk9以上版本需要1.16.21以上版本)

org.projectlombok
lombok
1.16.20

1、创建Mybatis的配置类:
@Configuration
public class MyBatisConfiger {

@Autowired
private Environment env;

@Bean
public DataSource dataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(env.getProperty("jdbc.driver"));
ds.setUrl(env.getProperty("jdbc.url"));
ds.setUsername(env.getProperty("jdbc.username"));
ds.setPassword(env.getProperty("jdbc.password"));
return ds;
}	

@Bean
@ConditionalOnMissingBean 
public SqlSessionFactoryBean sqlSessionFactory(){
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource);
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource resource = resolver.getResource("classpath:mybatis-config.xml");
factory.setConfigLocation(resource);

return factory;
}

}

2、创建Mapper接口的扫描类MapperScannerConfig:
@Configuration
@AutoConfigureAfter(MyBatisConfiger.class)
public class MapperScannerConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapper = new MapperScannerConfigurer();
mapper.setBasePackage(“com.example.dao”);
return mapper;
}
}
或者直接使用注解扫描dao接口产生代理:@MapperScan(basePackages=“com.example.dao”)

事务管理:
在Spring Boot中推荐使用注解来声明事务
@EnableTransactionManagement
@Transactional

首先需要导入依赖:

org.springframework.boot
spring-boot-starter-jdbc

当引入jdbc依赖之后,SpringBoot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用

第二种:使用mybatis官方提供的Spring Boot整合包实现,地址:https://github.com/mybatis/spring-boot-starter

导入依赖
(自动导入mybatis、mybatis-spring、spring-jdbc、spring-tx等包)
(自动读取数据库配置产生DataSource(HikariDataSource)、SqlSessionFactory及事务管理类)

org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.x

yml:
mybatis:
config-location: classpath:mybatis-config.xml

或者:
mybatis:
type-aliases-package: com.cssl.pojo
configuration:
auto-mapping-behavior: full
use-generated-keys: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#log-impl: org.apache.ibatis.logging.log4j.Log4jImpl:这个不打印查询结果

DAO接口产生代理只需要扫描:@MapperScan(basePackages=“com.cssl.dao”)或者在接口上用@Mapper

注意:
新版本2.1+默认使用数据库驱动8.0+
1、driver:com.mysql.cj.jdbc.Driver
2、url要加时区:jdbc:mysql:///mydb?serverTimezone=UTC

四、分页插件PageHelper的使用:
方式一:使用原生的PageHelper

com.github.pagehelper
pagehelper
5.1.x|4.1.x

Java配置代码:
@Bean
public PageInterceptor pageInterceptor(SqlSessionFactoryBean factory){
//分页插件5.x
Properties properties = new Properties();
properties.setProperty(“helperDialect”, “mysql”);
properties.setProperty(“reasonable”, “true”);
properties.setProperty(“pageSizeZero”, “true”);

PageInterceptor interceptor = new PageInterceptor();
interceptor.setProperties(properties);
//添加插件
factory.setPlugins(new Interceptor[]{interceptor});
return interceptor;
}

@Bean
public PageHelper pageHelper(SqlSessionFactoryBean factory){
    //分页插件4.x
    PageHelper pageHelper = new PageHelper();
    Properties properties = new Properties();
pageHelper.setProperties(properties);

    //添加插件
    factory.setPlugins(new Interceptor[]{pageHelper});
    return pageHelper;
}

方式二:使用PageHelper的starter(PageHelper5.1.8)

com.github.pagehelper
pagehelper-spring-boot-starter
[1.2.5,)

#pagehelper分页插件配置(不是必须)
pagehelper:
helperDialect: mysql
reasonable: true
pageSizeZero: true

五、加密
SpringBoot资源文件中的内容通常情况下是明文显示,安全性比较低。打开application.properties或application.yml,mysql登陆密码,redis登陆密码以及第三方的密钥等等一览无余,这里介绍一个加解密组件,提高属性配置的安全性。

jasypt由一个国外大神写了一个springboot下的工具包

1、首先引入jar

com.github.ulisesbocchio
jasypt-spring-boot-starter
2.0.0

如果用2.1.0必须导全三个(没有传递依赖,2.1.1版本不兼容)

com.github.ulisesbocchio
jasypt-spring-boot-starter
2.1.0

com.github.ulisesbocchio jasypt-spring-boot 2.1.0 org.jasypt jasypt 1.9.3

2、application.yml配置文件中增加如下内容(加解密时使用)
#jasypt加密的密匙(这种方式也有安全隐患)
jasypt:
encryptor:
password: EbfYkitulv73I2

#在JVM启动参数中设置
-Djasypt.encryptor.password=EbfYkitulv73I2

3、在测试用例中生成加密后的秘钥

org.springframework.boot
spring-boot-starter-test
test

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class JTest {
@Autowired
StringEncryptor encryptor;

@Test
public void getPass() {
    String url = encryptor.encrypt("jdbc:mysql:///mydb2?serverTimezone=GMT");
    String name = encryptor.encrypt("你的数据库用户名");
    String password = encryptor.encrypt("你的数据库密码");
    System.out.println(url);
    System.out.println(name);
    System.out.println(password);
}

}
GBQBRUVmTEqu/zpH33M639Kj0IqXVDMoWahGp70z9vPHH3eASU3ZoFff/80gfZwC
1JLSxqte89sAZs9El1u0Pg==
otVXGXBVUrebggKOgEKQpA==

4、将上面生成的name和password替换配置文件中的数据库账户和密码,替换后如下:
spring:
#数据库相关配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: ENC(GBQBRUVmTEqu/zpH33M639Kj0IqXVDMoWahGp70z9vPHH3eASU3ZoFff/80gfZwC)
username: ENC(1JLSxqte89sAZs9El1u0Pg==)
password: ENC(otVXGXBVUrebggKOgEKQpA==)

六、Web开发的自动配置类:org.springframework.boot.autoconfigure.web.WebMvcConfigurer

1、Spring Boot添加MVC配置:实现接口WebMvcConfigurer

@Component
public class MyMvcConfig implements WebMvcConfigurer {
//添加拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
HandlerInterceptor hi = new HandlerInterceptor() {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse 			response, Object handler) throws Exception {
        System.out.println("preHandle...");
        return true;
    }			
	};
registry.addInterceptor(hi).addPathPatterns("/**");
}

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
//没有添加默认也是这个视图解析器
//默认配置:org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration
registry.viewResolver(new InternalResourceViewResolver("/", ".jsp"));
}

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
StringHttpMessageConverter sh = new StringHttpMessageConverter(Charset.forName	("utf-8"));
//没有添加默认也有该消息转换器
converters.add(sh);
}

...

}

2、SpringBoot使用监听器|过滤器:
@ServletComponentScan(“com.cssl.web”)

或者使用
new ServletRegistrationBean(new XxxServlet)
new FilterRegistrationBean(new XxxFilter)
new ServletListenerRegistrationBean(new XxxListener)

3、MVC异常处理:(和SpringMVC一样)
a、Advice异常处理
@ControllerAdvice
public class ExceptionHandlerAdvice {

@ExceptionHandler(Exception.class)
public String handleException(Exception e) { ... }

}

b、父级Controller异常处理
定义父类 BaseController:
public class BaseController {

@ExceptionHandler(Exception.class)
public String handleException(Exception e) { ... }

}

注意:
1、SpringBoot默认使用日志:logback
2、maven项目中,手动创建的webapp目录不能访问,要使用webapp骨架或者手动添加Web资源目录
3、IDEA的maven项目中,默认源代码(src/main/java)目录下的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉(Eclipse打war包也会丢弃java目录下的xml)
解决这个问题有两种方式:
第一种是建立src/main/resources文件夹,将xml等资源文件放置到这个目录中。maven工具默认在编译的时候,会将resources文件夹中的资源文件一块打包进classes目录中。

第二种解决方式是配置maven的pom文件配置,在pom文件中找到<build>节点,添加下列代码:
<build>
<resources>
	<resource>
		<directory>src/main/java</directory>
		<includes>
			<include>**/*.properties</include>
			<include>**/*.xml</include>
		</includes>
		<filtering>false</filtering>
	</resource>
	<resource>
		<directory>src/main/resources</directory>
		<includes>
			<include>**/*.*</include>				
		</includes>
		<filtering>false</filtering>
	</resource>
</resources>
</build>

七、SpringBoot项目发布到独立的tomcat中运行:
在开发阶段我们推荐使用内嵌的tomcat进行开发,因为这样会方便很多,但是到生产环境,希望在独立的tomcat容器中运行,因为我们需要对tomcat做额外的优化,这时我们需要将工程打成war包发布

1、工程的打包方式为war
war

2、添加servlet|jsp|jstl依赖,注意provided

javax.servlet
javax.servlet-api
3.1.0
provided


org.apache.tomcat.embed
tomcat-embed-jasper
provided


javax.servlet
jstl
provided

3、将spring-boot-starter-tomcat的范围设置为provided(spring-boot-starter-web自带Tomcat)
设置为provided是在打包时会将该包排除,因为要放到独立的tomcat中运行,是不需要的

org.springframework.boot
spring-boot-starter-tomcat
provided

也可以在导入spring-boot-starter-web时配置:

org.springframework.boot
spring-boot-starter-web



org.springframework.boot
spring-boot-starter-tomcat


4、修改编译设置(idea默认加载插件)

maven-war-plugin
3.2.0

5、修改代码,设置启动配置
需要集成SpringBootServletInitializer,然后重写configure,将SpringBoot的入口类设置进去。
public class ExampleApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(ExampleApplication.class);
}
}
注意:SpringBoot1.x和2.x的包路径不同

6、打war包
Eclipse:工程右键->Run As->Maven build (Goals输入:clean package)

IDEA:
1、Edit Configurations->“+”->maven->directory(选择路径)|Command line(clean package)
2、在Maven视图plugins右键运行
3、也可以直接jsp右键运行会自动打war包

7、将war包复制到webapps下,启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值