ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springboot与数据访问

2020-06-21 19:04:36  阅读:355  来源: 互联网

标签:springboot 数据源 sql 访问 bean org import initParams 数据


 

 

官网的starthttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter

 

 

 

 

添加依赖,

 使用初始化器的时候自己选择依赖

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency> 
        <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
         </dependency>

 

编写配置文件:

 

 

效果:
​    默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源;
​    数据源的相关配置都在DataSourceProperties里面;
自动配置原理:
org.springframework.boot.autoconfigure.jdbc:
1、参考DataSourceConfiguration,根据配置创建数据源,默认使用Tomcat连接池;
可以使用spring.datasource.type指定自定义的数据源类型; 2、SpringBoot默认可以支持; org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource、

 

自动配置datasource的源码:

 

 

 

 

 

编写测试,测试是否连接成功:

    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        System.out.println(dataSource.getClass());
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

测试结果

 

 

 

 

 

 

 

测试出现错误:

java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required

这是由于快速生成的mysql-connector-java的版本问题,改为5.1.37就行

 

 

 

源码中有个自定义数据源的自动配置:

//使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性

    @Configuration(proxyBeanMethods = false)
    @ConditionalOnMissingBean(DataSource.class)
    @ConditionalOnProperty(name = "spring.datasource.type")
    static class Generic {

        @Bean
        DataSource dataSource(DataSourceProperties properties) {
            return properties.initializeDataSourceBuilder().build();
        }

    }

 

源码中还有一个累

 

 

作用:

​        1)、runSchemaScripts();运行建表语句;

​        2)、runDataScripts();运行插入数据的sql语句;

只需要:

schema-*.sql、data-*.sql
默认规则:schema.sql,schema-all.sql;
可以使用   
    schema:
      - classpath:department.sql
      指定位置

再配置文件中添加:

schema: classpath*:schema.sql 即可


操作数据库。会自动配置jdbcTemplate操作数据库

 

 

简单使用一下:

@Controller
public class Controllerhello {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @RequestMapping("/hello")
    @ResponseBody
    public Map<String,Object> map(){
        List<Map<String,Object>> maps= jdbcTemplate.queryForList("select  * from weibo_user ");
        return maps.get(1);
    }

}

 

 

 

 高级配置---使用druid数据源

 

默认配置文件如果没有配置,则使用默认的数据源

可以通过type去指定数据源类型

修改配置文件:

spring:
  datasource:
    username: root
    password: 2004
    url: jdbc:mysql://129.204.3.133:3306/students
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

测试能否切换:

运行我们之前的测代码就行

 

 

 

数据源的其他配置;

 

 图中的黄颜色是不能绑定到数据源当中的,因为没有和下面这个文件里面的属性对象

 

 

debug模式看看

 

 

这时候需要我们自己创建配置类

 

 

 由于配置文件里面的属性再DruidDataSource累里面有对应的属性,所以可以绑定:

 

 

测试一下:

会报错

 

 加入log4j依赖看看

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.13.3</version>
</dependency>

重新debug

 

 

 

接下来配置Druid监控

 

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;


@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }

    //配置Druid监控
    //配置管理后台Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean =new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
        Map<String,String> initParams = new HashMap<>();
        //下面的参数都是 StatViewServlet extends ResourceServlet两个累里面的属性
        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","admin");
//        initParams.put("allow","");//默认允许所有
//        initParams.put("deny","192.212.121.12");
        bean.setInitParameters(initParams);
        return bean;
    }

    //配置一个Web监控的Filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.css");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }

}

 

上面的后台和过滤都是自带的监控

注意:这里一定要加星号,

 

 结果

 

 

测试一个查询看看

 

 

可以再后台查看

 

标签:springboot,数据源,sql,访问,bean,org,import,initParams,数据
来源: https://www.cnblogs.com/betterquan/p/13172912.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有