springboot默认数据源如何设置连接数_从零开始搭建一个SpringBoot-mybatis-shiro的基础项目...

框架定义

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

MyBatis是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。

ApacheShiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

以上是这三个框架的定义,搭建一个包含以上三个框架的空白项目,可以便于快速开始开发。

Step1.获取一个裸Spring boot项目

前往springboot官网https://start.spring.io/,该地址允许我们自定义依赖并生成一个简易的springboot项目

1bb90457949f098678385d824ec434c0.png

此时的架构如图

915f89828a71ff413a1fa06d25a4d0c5.png

Step2.引入Spring web模块

1.只需在pom中添加一个依赖spring-boot-starter-web即可

<!--

2. 创建一个controller即可实现rest-service

c0c12d0a4706b7d6ab47cb31659dc158.png

访问测试地址的返回如下:

128f8f854acae248212ea222d970ab31.png

Step3.添加mybatis支持

此步骤需要引入3个依赖

1.mysql-connector-java用于建立jdbc驱动

2.mybatis-spring-boot-starter用于快速导入mybatis

3.tk.mybatis(可选),用于提供默认sql以加快开发效率

!--mybatis导入-->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>6.0.6</version>
</dependency>
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.3.0</version>
</dependency>
<dependency>
   <groupId>tk.mybatis</groupId>
   <artifactId>mapper</artifactId>
   <version>4.1.2</version>
</dependency>

数据源配置信息则置于application.properties文档中即可,如下

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.101.72:3306/ssc_dev?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=root

mybatis的详细配置应新建mybatis-config.xml置于resource目录下,此处不赘述

此时项目架构如下

5e226af6510ac643fa7478b7d004c062.png

Tips:为了能自动注入生成的Mapper到service层,Application中应添加@MapperScan("com.ttt.springbootdemo.dao.mapper")注解。

Mybatis导入测试如图:

652f894e52b756cd980dd958d83634c0.png

tips:mybatis的mapper.xml放在resource目录下,路径设置在application.properties中

mybatis.mapper-locations=classpath:static/Mapper/*.xml

Step4.添加日志支持

Spring-boot-starter已经提供了基本的日子功能,剩下的是日志的配置,

简单粗暴的办法,在application.properties中加入log参数

logging.level.root=DEBUG

更合理的做法则是新增一个logback.xml文件到resoucre目录下,用于精细配置,如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback</contextName>


 <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
 <property name="LOG_PATH" value="${user.home}/OMS"/>

 <!--输出到控制台-->
 <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
            <charset>${file.encoding}</charset>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_PATH}/running.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/running/running.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>5MB</maxFileSize>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
            <charset>${file.encoding}</charset>
        </encoder>
 <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
            <!--<maxFileSize>5MB</maxFileSize>-->
        <!--</triggeringPolicy>-->
 </appender>

<!--    <logger name="com.dabay.oms.dao.mapper" level="DEBUG" additivity="false">
        <appender-ref ref="console"/>
    </logger>-->


 <logger name="org.springframework" level="error"/>
    <logger name="org.apache" level="error"/>
    <logger name="com.alibaba.druid" level="error"/>
    <logger name="com.alibaba.dubbo" level="info"/>
    <logger name="com.dabay.oms.dao" level="error"/>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>

Step5.引入redis缓存

1. 需要引入的依赖为spring-boot-starter-data-redis

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2. Redis相关的配置可以放到application里

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=192.168.101.72
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8  
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1  
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8  
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0  
# 连接超时时间(毫秒)
spring.redis.timeout=3000

3. 需要一个配置类以提供redisTemplate

@Configuration
@EnableCaching
public class RedisConfig {

 @Bean(name = "redisTemplate")
    RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate();
 redisTemplate.setConnectionFactory(redisConnectionFactory);
 redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
 }
}

Step6.引入shiro进行权限管理(可选)

1.需要引入的依赖为shiro-spring

<!--shiro导入-->
<dependency>
   <groupId>org.apache.shiro</groupId>
   <artifactId>shiro-spring</artifactId>
   <version>1.4.0</version>
</dependency>

2.需要新建一个config类来配置shiro的行动模式,以下讲解shiroConfig中每个bean的作用

(1).ShiroFilterFactoryBean类继承了FactoryBean,能够作为工厂类生成shiro自己的SpringShiroFilter,而shiro代理了servlet的filterChain,在处理请求时先走Shiro 自己的 Filter 体系,然后才会委托给 Servlet 容器的 FilterChain 进行 Servlet 容器级别的 Filter 链执行;

对应的代码为

ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);

Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/favicon.ico", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");              // druid登录交给druid自己
filterChainDefinitionMap.put("/**", "authc");
//authc表示需要验证身份才能访问,还有一些比如anon表示不需要验证身份就能访问等。
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/index");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;

如上,filterChainDefinitionMap设定了不同url请求使用的拦截器,具体规则如下:

9db93b3d9b24e320e71d8cf4d0547c65.png

详情见https://blog.csdn.net/Angel_G/article/details/53993877

(2)shiroRealm(域),也可以认为是shiro的权限数据源,该bean用于连接数据库中权限表与shiro,需要继承shiro的realm并手动实现doGetAuthenticationInfo方法以验证用户,以及doGetAuthorizationInfo方法以向用户授权,简易代码如下:

@Bean
public AuthorizingRealm myShiroRealm(HashedCredentialsMatcher hashedCredentialsMatcher) {
    AuthorizingRealm  myShiroRealm = new AuthorizingRealm() {

 @Override
 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            MyUserNamePassWordToken namePassWordToken = (MyUserNamePassWordToken) token;
 SysUser sysUser = new SysUser();
 sysUser.setUsername(namePassWordToken.getUsername());
 sysUser = sysUserService.findUser(sysUser);
            if (sysUser == null) {
 throw new UnknownAccountException();
 }
 return new SimpleAuthenticationInfo(namePassWordToken.getUsername(), "cdas", "dsdv");
 }

 @Override
 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) {
 LOGGER.info("权限配置 --> MyShiroRealm.doGetAuthorizationInfo()");
 SysUser user = new SysUser();
 user = sy
sUserService.findUser(user);
 SimpleAuthorizationInfo simpleAuthorInfo = new SimpleAuthorizationInfo();
 simpleAuthorInfo.addRole(user.getUserid().toString());
            return simpleAuthorInfo;
 }
    };
 myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher); //设置加密规则
 myShiroRealm.setCachingEnabled(true);
 myShiroRealm.setAuthorizationCachingEnabled(true);
 myShiroRealm.setAuthenticationCachingEnabled(true);
    return myShiroRealm;
}

(3)securityManager是shrio框架的核心与管理者,web项目通常使用DefaultWebSecurityManager,并将刚才声明的realm 注入,(可选)也可以通过配置catchManager的方式将shiro的缓存放到redis中

@Bean
public SecurityManager securityManager(AuthorizingRealm myShiroRealm, CacheManager shiroRedisCacheManager) {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
 securityManager.setCacheManager(shiroRedisCacheManager);
 securityManager.setRememberMeManager(cookieRememberMeManager());
 securityManager.setRealm(myShiroRealm);
    return securityManager;
}

以上是将数据库中的用户User-权限Role关联作为shiro数据源的配置,按自己的需求配置数据库及对应的realm之后shiro的配置就成功了。

源代码地址

hatemyselfandyouall/spring-boot-demo

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值