美文网首页
database with spring

database with spring

作者: cdz620 | 来源:发表于2020-03-04 09:42 被阅读0次

glossary

spring 存储层的设计原理

image.png
  • service object 层不管理数据访问控制,通过接口访问业务数据
  • repository interface: 提供接口
  • repository implemenlation: 不同数据存储层具体实现

spring templating

  • 对各个平台的Exception做统一适配,抛到应用层的都是spring 定义好的异常类型,解耦应用层与数据访问层
  • templates:管理数据访问中固定的步骤:管理transactions,resources,处理exceptions
  • callbacks: creating statements, binding parameters, and marshaling result sets

jndi data source 配置

xml configurationg

<jee:jndi-lookup id="dataSource"
     jndi-name="/jdbc/SpitterDS"
 resource-ref="true" />

resource-ref是一个与java:comp/env上下文相对应的JNDI名称,并且在整个Web应用中必须是惟一的

JavaConfig

@Bean
public JndiObjectFactoryBean dataSource() {
  JndiObjectFactoryBean jndiObjectFB = new JndiObjectFactoryBean();
  jndiObjectFB.setJndiName("jdbc/SpittrDS");
  jndiObjectFB.setResourceRef(true);
  jndiObjectFB.setProxyInterface(javax.sql.DataSource.class);
  return jndiObjectFB;
}

embedded-database

xml configuration

  <jdbc:embedded-database id="dataSource" type="H2">
    <jdbc:script location="classpath:spittr/db/jdbc/schema.sql" />
    <jdbc:script location="classpath:spittr/db/jdbc/test-data.sql" />
  </jdbc:embedded-database>

JavaConfig

@Bean
public DataSource dataSource() {
  return new EmbeddedDatabaseBuilder()
      .setType(EmbeddedDatabaseType.H2)
      .addScript("classpath:schema.sql")
      .addScript("classpath:test-data.sql")
      .build();
}

JDBC

  • DriverManagerDataSource: 每次请求一个新的连接
  • SimpleDriverDataSource: DriverManagerDataSource增加版,说什么解决类加载的问题,什么鬼不懂,用这个就是
  • SingleConnectionDataSource: 单例,注意别多线程

JavaConfig

@Bean
public DataSource dataSource() {
  DriverManagerDataSource ds = new DriverManagerDataSource();
  ds.setDriverClassName("org.h2.Driver");
  ds.setUrl("jdbc:h2:tcp://localhost/~/spitter");
  ds.setUsername("sa");
  ds.setPassword("");
return ds; }

xml configuration

<bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource"
          p:driverClassName="org.h2.Driver"
          p:url="jdbc:h2:tcp://localhost/~/spitter"
          p:username="sa"
          p:password="" />

Profile

JavaConfig

package com.habuma.spittr.config;
import org.apache.commons.dbcp.BasicDataSource;
import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.jndi.JndiObjectFactoryBean;

@Configuration
public class DataSourceConfiguration {
    @Profile("development")
    @Bean
    public DataSource embeddedDataSource() {
        return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).addScript("classpath:schema.sql").addScript("classpath:test-data.sql").build();
    }

    @Profile("qa")
    @Bean
    public DataSource Data() {
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName("org.h2.Driver");
        ds.setUrl("jdbc:h2:tcp://localhost/~/spitter");
        ds.setUsername("sa");
        ds.setPassword("");
        ds.setInitialSize(5);
        ds.setMaxActive(10);
        return ds;
    }

    @Profile("production")
    @Bean
    public DataSource dataSource() {
        Development data source JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
        jndiObjectFactoryBean.setJndiName("jdbc/SpittrDS");
        jndiObjectFactoryBean.setResourceRef(true);
        jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
        return (DataSource) jndiObjectFactoryBean.getObject();
    }
}

xml configuration

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc
      http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
    http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
<beans profile="development">
    <jdbc:embedded-database id="dataSource" type="H2">
    <jdbc:script location="com/habuma/spitter/db/jdbc/schema.sql"/>
    <jdbc:script location="com/habuma/spitter/db/jdbc/test-data.sql"/>
    </jdbc:embedded-database>   
</beans>
<beans profile="qa">
    <bean id="dataSource"
      class="org.apache.commons.dbcp.BasicDataSource"
      p:driverClassName="org.h2.Driver"
      p:url="jdbc:h2:tcp://localhost/~/spitter"
      p:username="sa"
      p:password=""
      p:initialSize="5"
      p:maxActive="10" />
</beans>
  
<beans profile="production">
    <jee:jndi-lookup id="dataSource" jndi-name="/jdbc/SpitterDS" resource-ref="true" /> 
</beans>
</beans>

相关文章

网友评论

      本文标题:database with spring

      本文链接:https://www.haomeiwen.com/subject/amrjchtx.html