SpringBoot Beans定义 连接池

SpringBoot Beans定义

原有Spring框架,定义Bean方法如下

  1. xml配置
  2. 组件扫描、@Controller、@Service...

原有Spring框架,参数注入方法如下

常用的参数注入有注入基本值/对象

  1. xml配置
  2. @Value、@Autowired、@Resource等

SpringBoot框架,定义Bean方法如下

  1. 利用@Configuration+@Bean
  2. 利用组件扫描@ComponentScan+@Controller\@Service\@Configuration...

SpringBoot框架,参数注入方法如下

  1. Bean对象之间注入就使用@Autowired或@Resource即可
  2. 从配置文件注入基本值@EnableConfigurationProperties(@EnableAutoConfiguration(功能包含前面的EnableConfigurationProperties))+@ConfigurationProperties+@Value("$(key)")

    可以将application.properties中的参数注入到对象中。

@SpringBootApplication注解

该注解主要包含以下功能:

  • @Configuration bean定义
  • @ComponentScan 组件扫描(路径默认是本包和子包路径)
  • @EnableAutoConfiguration 自动配置

@EnableAutoConfiguration自动配置原理

开启Spring自动配置后,会调用spring-boot-autoconfigure.jar进行处理。包中META-INF/spring.factories文件,定义了自动配置启用的功能。

例如:

org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\

通过自动配置,底层创建了DispatcherServlet、RequestMappingHanlderMapping、ViewResolver、DataSource、JdbcTemplate对象放入Spring容器,使用时也可以直接注入应用。

SpringBoot连接池

  1. 默认连接池使用方法

    使用方法如下:

    • 在pom.xml中追加spring-boot-stater-jdbc和驱动包支持

      <!-- 追加spring-jdbc/tomcat-jdbc连接池等 -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
      </dependency>
      
      <!-- ojdbc6引入采用了build-path -->
      
    • 在application.properties追加datasource定义

      spring.datasource.username=SCOTT
      spring.datasource.password=TIGER
      spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
      spring.datasource.driverClassName=oracle.jdbc.OracleDriver
      
    • 从Spring容器获取dataSource和jdbcTemplate对象

      ApplicationContext ac = 
          SpringApplication.run(BootBeanFactory.class);
      DataSource ds = ac.getBean("dataSource",DataSource.class);
      JdbcTemplate template = 
          ac.getBean("jdbcTemplate",JdbcTemplate.class);
      
  2. 默认连接池规则

    在引入spring-boot-starter-jdbc后,内部包含了tomcat-jdbc包,里面有tomcat连接池.然后通过自动配置DataSourceAutoConfigurer创建DataSource对象。

    SpringBoot创建默认DataSource时,规则如下:

    • 优先寻找创建Tomcat连接池
    • 如果没有Tomcat连接池,会查找创建HikariCP
    • 如果没有HikariCP连接池,会查找创建dbcp
    • 如果没有dbcp连接池,会查找创建dbcp2
    • 可以使用spring.datasource.type属性指定连接池类型

      spring.datasource.type=org.apache.commons.dbcp.BasicDataSource
      
  3. 多数据源应用

    如果系统需要访问多个不同的数据库,可以手动创建多个连接池对象。(默认连接池不再创建)

    @Configuration
    public class DataSourceConfig {
    
        @Bean("dbcpDS1")
        @Primary//注入时默认注入该类型对象
        @ConfigurationProperties(prefix="spring.datasource")
        public DataSource createDbcp1(){
    //      BasicDataSource dbcp = new BasicDataSource();
    //      dbcp.setUsername("SCOTT");
    //      dbcp.setPassword("TIGER");
    //      dbcp.setDriverClassName("oracle.jdbc.OracleDriver");
    //      dbcp.setUrl("jdbc:oracle:thin:@localhost:1521:XE");
    //      return dbcp;
            DataSource dbcp = DataSourceBuilder.create()
                .type(BasicDataSource.class).build();
            return dbcp;
        }
    }
    

    当存在多个DataSource对象时,会引起底层注入异常,需要将某一个追加@Primary标记,指定为默认注入对象。

  4. SpringBoot DAO

    自动配置已经默认创建了JdbcTemplate对象,开发者只需要编写实体类、Dao接口、Dao实现类,注入JdbcTemplate使用。

    @Repository
    public class JdbcBookDao implements BookDao{
    
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public List<Book> findAll() {
            String sql = "select * from xdl_book";
            RowMapper<Book> rowMapper = new BeanPropertyRowMapper<Book>(Book.class);
            return jdbcTemplate.query(sql, rowMapper);
        }
    
    }
    
  5. SpringBoot Mybatis

    引入mybatis-spring-boot-starter集合包,会自动引入mybatis、mybatis-spring等包。

    • 在pom.xml引入mybatis-spring-boot-starter

      <!-- mybatis-spring -->
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.2.2</version>
      </dependency>   
      
    • 编写实体类

      public class Product implements Serializable{
          private int id;
          private String name;
          private String keywords;
          private Date add_time;
          public int getId() {
              return id;
          }
          public void setId(int id) {
              this.id = id;
          }
          //其他省略
      }
      
    • 编写Mapper接口,在接口方法中定义SQL语句

      public interface ProductDao {
      
          @Select("select * from xdl_product")
          public List<Product> findAll();
      
      }
      
    • 在主启动类追加@MapperScanner标记

      @SpringBootApplication
      @MapperScan(basePackages={"cn.xdl.dao"})//扫描mapper接口创建对象
      public class BootBeanFactory {
      
      }
      
    • 获取Spring容器productDao对象使用

      ApplicationContext ac = 
          SpringApplication.run(BootBeanFactory.class);
      ProductDao proDao = 
          ac.getBean("productDao",ProductDao.class);
      List<Product> list = proDao.findAll();
      for(Product pro:list){
          System.out.println(pro.getId()+" "+pro.getName());
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于在Spring Boot中使用Elasticsearch连接池,你可以使用Spring Data Elasticsearch提供的自动配置功能来实现。 首先,确保在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 接下来,在`application.properties`或`application.yml`文件中配置Elasticsearch连接信息,例如: ```properties spring.data.elasticsearch.cluster-nodes=localhost:9200 spring.data.elasticsearch.cluster-name=my-cluster ``` 然后,创建一个Elasticsearch的配置类,例如`ElasticsearchConfig.java`: ```java import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.RestClients; import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration; @Configuration public class ElasticsearchConfig extends AbstractElasticsearchConfiguration { @Value("${spring.data.elasticsearch.cluster-nodes}") private String clusterNodes; @Override @Bean public RestHighLevelClient elasticsearchClient() { final ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo(clusterNodes) .build(); return RestClients.create(clientConfiguration).rest(); } } ``` 最后,你可以在你的服务类或控制器中注入`RestHighLevelClient`来使用Elasticsearch连接池,例如: ```java import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MyService { private final RestHighLevelClient elasticsearchClient; @Autowired public MyService(RestHighLevelClient elasticsearchClient) { this.elasticsearchClient = elasticsearchClient; } // 使用elasticsearchClient进行Elasticsearch操作 } ``` 这样就完了Spring Boot与Elasticsearch连接池的配置和使用。你可以根据自己的需求进行进一步的配置和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值