一、SpringBoot整合springmvc
springboot默认配置已经可以使用SpringMVC了,不过有时候需要进行自定义配置。
修改端口
查看SpringBoot的全局属性可知,端口通过以下方式配置:
# 映射端口
server.port= 6666
访问静态资源
源码查看ResourceProperties自动配置类,默认的静态资源路径为:
classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public
只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。
添加拦截器
定义一个拦截器:实现HandlerInterceptor或继承HandlerInterceptorAdapter。建议使用HandlerInterceptorAdapter,因为可以按需进行方法的覆盖。
public class LoginInterceptor implements HandlerInterceptor {
private Logger logger
= LoggerFactory
.getLogger(LoginInterceptor
.class);
@Override
public boolean preHandle(HttpServletRequest request
, HttpServletResponse response
, Object handler
) {
logger
.debug("preHandle method is now running!");
return true;
}
@Override
public void postHandle(HttpServletRequest request
, HttpServletResponse response
, Object handler
, ModelAndView modelAndView
) {
logger
.debug("postHandle method is now running!");
}
@Override
public void afterCompletion(HttpServletRequest request
, HttpServletResponse response
, Object handler
, Exception ex
) {
logger
.debug("afterCompletion method is now running!");
}
}
定义配置类,注册拦截器:
@Configuration
public class MvcConfig implements WebMvcConfigurer{
@Bean
public LoginInterceptor
loginInterceptor(){
return new LoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry
) {
registry
.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
}
}
二、SpringBoot整合数据库相关技术
创建user表
在test数据库中创建user表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id
` int(11) NOT NULL AUTO_INCREMENT,
`username
` varchar(50) DEFAULT NULL,
`password
` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id
`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
;
INSERT INTO `user` VALUES ('1', 'zhangsan', '123');
INSERT INTO `user` VALUES ('2', 'lisi', '123');
添加数据库连接信息
在application.properties配置
#数据库:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
添加数据库驱动
<dependency>
<groupId>mysql
</groupId>
<artifactId>mysql-connector-java
</artifactId>
</dependency>
SpringBoot整合Mybatis
添加Mybatis的起步依赖
<dependency>
<groupId>org.mybatis.spring.boot
</groupId>
<artifactId>mybatis-spring-boot-starter
</artifactId>
<version>1.1.1
</version>
</dependency>
添加数据库连接信息
在application.properties配置
#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.ao.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
编写实体
public class User {
private Long id
;
private String username
;
private String password
;
}
编写Mapper
@Mapper
public interface UserMapper {
public List
<User> queryUserList();
}
注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
配置Mapper映射文件
在src\main\resources\mapper路径下加入UserMapper.xml配置文件"
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ao.mapper.UserMapper">
<select id="queryUserList" resultType="user">
select * from user
</select>
</mapper>
测试略
SpringBoot整合Spring Data JPA
添加Spring Data JPA的起步依赖
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-data-jpa
</artifactId>
</dependency>
application.properties中配置jpa的相关属性
#JPA相关配置:
spring.jpa.database=MySQL
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
编写实体
@Entity
public class User {
@Id
@GeneratedValue(strategy
= GenerationType
.IDENTITY
)
private Long id
;
private String username
;
private String password
;
}
编写UserRepository
public interface UserRepository extends JpaRepository<User,Long>{
public List
<User> findAll();
}
测试略
SpringBoot整合通用mapper
添加依赖
<!-- 通用mapper
-->
<dependency>
<groupId>tk
.mybatis
</groupId
>
<artifactId>mapper
-spring
-boot
-starter
</artifactId
>
<version>2.0.2</version
>
</dependency
>
编写实体
@TableName("t_user")
public class User {
@Id
@KeySql(useGeneratedKeys
= true)
private Long id
;
private String username
;
private String password
;
}
编写Mapper
不需要做任何配置就可以使用了,注意记得在mapper接口添加@Mapper注解
@Mapper
public interface UserMapper extends Mapper<User>{
}
测试略
SpringBoot整合mybatis-plus
引入依赖
<!--mybatis
-plus依赖包
-->
<dependency>
<groupId>com
.baomidou
</groupId
>
<artifactId>mybatis
-plus
-boot
-starter
</artifactId
>
<version>3.3.0</version
>
</dependency
>
application.properties中配置相关属性
#mybatis
-plus 相关
mybatis
-plus
:
# 支持枚举类型
typeEnumsPackage
: com
.ao
.dto
.enums
global
-config
:
sql
-parser
-cache
: true
db
-config
:
logic
-delete
-field
: deleted #全局逻辑删除字段值
3.3.0开始支持,详情看下面。
logic
-delete
-value
: 1 # 逻辑已删除值
(默认为
1)
logic
-not
-delete
-value
: 0 # 逻辑未删除值
(默认为
0)
configuration
:
log
-impl
: org
.apache
.ibatis
.logging
.stdout
.StdOutImpl # 打印SQL
编写实体
可在官方下载代码生成器
@TableName("t_user")
public class User {
@TableField("id")
private Long id
;
@TableField("username")
private String username
;
@TableField("password")
private String password
;
}
service接口
public interface IUserService extends IService<User> {
}
service实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
编写Mapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
编写Mapper.xml
<?xml version
="1.0" encoding
="UTF-8"?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace
="com.ao.demo.mapper.UserMapper">
</mapper
>
测试略
三、SpringBoot整合Junit
引入依赖
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-test
</artifactId>
<scope>test
</scope>
</dependency>
编写测试类
@RunWith(SpringRunner
.class)
@SpringBootTest(classes
= TestSpringBootApplication
.class)
public class MapperTest {
@Autowired
private UserMapper userMapper
;
@Test
public void test() {
List
<User> users
= userMapper
.queryUserList();
System
.out
.println(users
);
}
}
SpringRunner继承自SpringJUnit4ClassRunner,使用哪一个Spring提供的测试测试引擎都可以
public final class SpringRunner extends SpringJUnit4ClassRunner
@SpringBootTest的属性指定的是引导类的字节码对象
四、SpringBoot整合Redis
添加redis的起步依赖
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-data-redis
</artifactId>
</dependency>
配置redis的连接信息
#redis 相关
redis:
host: 127.0.0.1
port: 6379
password: 123456
database: 2 #默认就是0
#redis jedis 相关
jedis:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 100
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 8
# 连接池中的最小空闲连接
min-idle: 0
redis服务层
@Component
public class RedisService{
@Autowired
private RedisTemplate
<String, String> stringRedisTemplate
;
public boolean set(String key
,String value
,Long time
) {
try {
stringRedisTemplate
.opsForValue().set(key
,value
,time
,TimeUnit
.SECONDS
);
return true;
} catch (Exception e
) {
e
.printStackTrace();
}
return false;
}
public String
get(String key
) {
try {
return stringRedisTemplate
.opsForValue().get(key
);
} catch (Exception e
) {
e
.printStackTrace();
}
return null
;
}
.........
测试略
五、SpringBoot整合dubbo
搭建提供方
引入依赖
<dependency>
<groupId>com
.alibaba
.boot
</groupId
>
<artifactId>dubbo
-spring
-boot
-starter
</artifactId
>
<version>0.2.0</version
>
</dependency
>
配置文件
dubbo
:
monitor
:
# 连接监控中心 在注册中心中自动发现
protocol
: registry
protocol
:
# 指定通信规则(通信协议
/通信端口)
name
: dubbo
port
: 20885
registry
:
#
2、指定注册中心的位置
protocol
: zookeeper
address
: 127.0.0.1:2181
application
:
# 指定当前服务
/应用的名字(同样的服务名字相同,不要和别的服务同名)
name
: user_provide
暴露服务的实现类
@Service
@Component
public class UserServiceImpl implements IUserService {
@Override
public List
<User> findAll(){
return UserMapper
.findAll();
}
}
搭建消费方
引入依赖
<dependency>
<groupId>com
.alibaba
.boot
</groupId
>
<artifactId>dubbo
-spring
-boot
-starter
</artifactId
>
<version>0.2.0</version
>
</dependency
>
配置文件
# dubbo相关配置
dubbo
:
application
:
name
: user_consumer
registry
:
address
: zookeeper
://127.0.0.1:2181
monitor
:
protocol
: registry
# monitor
:
# protocol
: registry
consumer
:
# 关闭所有服务的启动时检查
(没有提供者时报错
):
check
: false
# 超时失败时间,单位为毫秒,默认为
1秒
timeout
: 10000
# 失败重试次数
retries
: 2
消费接口实现类
@Service
@Component
public class TestServiceImpl implements ITestService {
@Reference
UserService userService
;
@Override
public List
<User> findAll(){
return userService
.findAll();
}
}
测试略