簡體   English   中英

Spring Boot和多個數據庫

[英]Spring Boot and multiple databases

我已經建立了一個帶有單個數據庫連接的基本spring項目。

在application.properties文件中,我具有數據庫設置:

spring.datasource.url = jdbc:mysql://192.168.1.19/ticket
spring.datasource.username = dbusername
spring.datasource.password = dbpassword

我創建了一個基本的DAO類,其他DAO對其進行了擴展:

@Transactional
public class Dao<E> {

    @PersistenceContext
    private EntityManager entityManager;

    private Class<E> entityClass;

    public Dao(Class<E> entityClass) {
        this.entityClass = entityClass;
    }

    public void create(E object) {
        entityManager.persist(object);

        return;
    }

    public void delete(E object) {
        if (entityManager.contains(object)) {
            entityManager.remove(object);
        } else {
            entityManager.remove(entityManager.merge(object));
        }

        return;
    }

    @SuppressWarnings("unchecked")
    public List<E> getAll() {
        return entityManager.createQuery("from " + entityClass.getName()).getResultList();
    }

    public E get(long id) {
        return entityManager.find(entityClass, id);
    }

    public void update(E object) {
        entityManager.merge(object);
        return;
    }
}

這是擴展基本DAO的示例實體:

@Repository
public class PersonDao extends Dao<Person> {

    public PersonDao() {
        super(Person.class);
    }
}

當前,它使用單個數據庫,但是我需要能夠添加第二個數據庫,並以某種方式在每個DAO中定義要使用的數據源。 每個DAO只會使用一個數據庫,因此不需要DAO能夠連接到多個數據庫。

我已經做過一些研究,這似乎表明我需要使用JdbcTemplate嗎? 但我似乎找不到符合我需要的教程。 另外,在幾分鍾內,entityManager被注入到DAO中,但是我看過的JdbcTemplate示例似乎沒有使用entityManager,這有點令人困惑。

database.password1=<password1>
database.url1=jdbc\:mysql\://localhost\:3306/twodbone
database.username1=<username1>
database.password2=<password1>
database.url2=jdbc\:mysql\://localhost\:3306/twodbtwo
database.username2=<username2>
database.driverClassName=com.mysql.jdbc.Driver

這樣,您可以添加多個數據庫,並同時配置hibernate.cfg.xml文件和applicationContext.xml文件。

@Repository
public class FooRepository
{
    @PersistenceContext
    private EntityManager entityManager;

    @Autowired(required = true)
    private JdbcTemplate jdbcTemplate;

    public void saveFoo(Foo foo)
    {
         this.entityManager.persist(foo);
    }

    public List<SomeReportPojo> getSomeReport()
    {
         return this.entityManager.queryForList("SELECT .. ",SomeProjectPojo.class); 
    }
}

對於jdbc Templetes,應保留this.jdbcTemplate而不是this.entityManager

這是簡單的例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM