Heim Java javaLernprogramm Java Spring Boot 1.5.4 konfiguriert mehrere Datenquellen

Java Spring Boot 1.5.4 konfiguriert mehrere Datenquellen

Jun 26, 2017 am 11:42 AM
boot spring 数据源 配置

Spring Boot unterstützt bereits die Konfiguration mehrerer Datenquellen, was sehr mühsam ist. Schauen Sie sich die folgenden Lösungen an, keine Sorge.

1. Definieren Sie zunächst die Datenquellenkonfiguration

#=====================multiple database config============================
#ds1
first.datasource.url=jdbc:mysql://localhost/test?characterEncoding=utf8&useSSL=true
first.datasource.username=root
first.datasource.password=123456
first.datasource.driver-class-name=com.mysql.jdbc.Driver
first.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
first.datasource.max-wait=10000
first.datasource.max-active=200
first.datasource.test-on-borrow=true
first.datasource.initial-size=10

#ds2
second.datasource.url=jdbc:mysql://localhost/test2?characterEncoding=utf8&useSSL=true
second.datasource.username=root
second.datasource.password=123456
second.datasource.driver-class-name=com.mysql.jdbc.Driver
second.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
second.datasource.max-wait=10000
second.datasource.max-active=200
second.datasource.test-on-borrow=true
second.datasource.initial-size=10
Nach dem Login kopieren
#=====================jpa config================================
#实体类维护数据库表结构的具体行为:update/create/create-drop/validate/none
spring.jpa.hibernate.ddl-auto=none
#打印sql语句
spring.jpa.show-sql=true
#格式化输出的json字符串
spring.jackson.serialization.indent_output=true


2.配置ds1的相关注入对象和启用jpa支持
Nach dem Login kopieren
/**
 * Created by hdwang on 2017-06-16.
 * 第一个数据源配置
 * If you are using Spring Data, you need to configure @EnableJpaRepositories */@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.hdwang.dao.datajpa.firstDs",entityManagerFactoryRef = "firstEntityManagerFactory",transactionManagerRef="firstTransactionManager")public class FirstDsConfig {/** * 数据源配置对象
     * Primary 表示默认的对象,Autowire可注入,不是默认的得明确名称注入
     * @return */@Bean
    @Primary
    @ConfigurationProperties("first.datasource")public DataSourceProperties firstDataSourceProperties() {return new DataSourceProperties();
    }/** * 数据源对象
     * @return */@Bean
    @Primary
    @ConfigurationProperties("first.datasource")public DataSource firstDataSource() {return firstDataSourceProperties().initializeDataSourceBuilder().build();
    }/** * 实体管理对象
     * @param builder 由spring注入这个对象,首先根据type注入(多个就取声明@Primary的对象),否则根据name注入
     * @return */@Bean
    @Primarypublic LocalContainerEntityManagerFactoryBean firstEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {return builder
                .dataSource(firstDataSource())
                .packages("com.hdwang.entity.dbFirst")
                .persistenceUnit("firstDs")
                .build();
    }/** * 事务管理对象
     * @return */@Bean(name = "firstTransactionManager")
    @Primarypublic PlatformTransactionManager transactionManager(EntityManagerFactory emf){
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);return transactionManager;
    }

    @Bean
    @Primarypublic JdbcTemplate jdbcTemplate(){return new JdbcTemplate(firstDataSource());
    }

    @Bean
    @Primarypublic TransactionTemplate transactionTemplate(PlatformTransactionManager platformTransactionManager){return new TransactionTemplate(platformTransactionManager);
    }
}
Nach dem Login kopieren

相关知识点:
1.使用@Bean可以创建一个bean对象交给spring容器管理
2.@Bean创建的bean对象的名称默认为方法名,也可以指定
3.@Bean方法参数表示,接收一个bean对象,默认按照type类型接收注入的对象,若要修改为byName方式,可以使用@Qualifier注解注入准确的对象
4.@Primary表示该bean为此类型的默认bean,在其他地方引用的时候用@Autowired即可按照类型注入,不受同类型多个对象影响
5.EnableJpaRepositories表示启用spring data jpa的支持,也就是jpa的新使用方式,注意basePackages指的事 @Repository接口的所在包位置,可配置多个
其他注解就不清楚了!
Nach dem Login kopieren
2.配置ds2的相关注入对象和启用jpa支持
Nach dem Login kopieren
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.hdwang.dao.datajpa.secondDs", entityManagerFactoryRef = "secondEntityManagerFactory",transactionManagerRef = "secondTransactionManager")public class SecondDsConfig {

    @Bean
    @ConfigurationProperties("second.datasource")public DataSourceProperties secondDataSourceProperties() {return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("second.datasource")public DataSource secondDataSource() {return secondDataSourceProperties().initializeDataSourceBuilder().build();
    }/** * 实体管理对象
     * @param builder  由spring注入这个对象,首先根据type注入(多个就取声明@Primary的对象),否则根据name注入
     * @return */@Beanpublic LocalContainerEntityManagerFactoryBean secondEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {return builder
                .dataSource(secondDataSource())
                .packages("com.hdwang.entity.dbSecond")
                .persistenceUnit("secondDs")
                .build();
    }/** * 事物管理对象
     * @param secondEntityManagerFactory 实体管理工厂对象(按照名称注入)
     * @return 平台事物管理器     */@Bean(name = "secondTransactionManager")public PlatformTransactionManager transactionManager(@Qualifier("secondEntityManagerFactory")LocalContainerEntityManagerFactoryBean secondEntityManagerFactory){
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(secondEntityManagerFactory.getObject());return transactionManager;
    }

    @Bean(name="jdbcTemplate2")public JdbcTemplate jdbcTemplate(){return new JdbcTemplate(secondDataSource());
    }

    @Bean(name = "transactionTemplate2")public TransactionTemplate transactionTemplate(@Qualifier("secondTransactionManager")PlatformTransactionManager transactionManager){return new TransactionTemplate(transactionManager);
    }
}
Nach dem Login kopieren

3.Repository-Datenpersistenzschicht

package com.hdwang.dao.datajpa.firstDs;

@Repositorypublic interface UserRepository extends JpaRepository<User, Integer> {/** * spring data jpa 会自动注入实现(根据方法命名规范)
     * @return */User findByNumber(String number);


    @Modifying
    @Query("delete from User u where u.id = :id")void deleteUser(@Param("id")int id);
}
Nach dem Login kopieren
package com.hdwang.dao.datajpa.secondDs;

@Repositorypublic interface OrderRepository extends JpaRepository<Order, Integer> {/** * spring data jpa 会自动注入实现(根据方法命名规范)
     * @return */User findByNumber(String number);


    @Modifying
    @Query("delete from Order o where o.id = :id")void deleteUser(@Param("id") int id);
}
Nach dem Login kopieren

上面两个接口分属两个数据源,在@EnableJpaRepositories配置好后,这里就可以正确操作相应的数据源了


4.Service服务层,注意事物(接口我就不贴了)
Nach dem Login kopieren
@Service@Transactional("firstTransactionManager")public class UserServiceImpl implements UserService {

    @Autowiredprivate UserRepository userRepository;

    @Overridepublic User findById(int id) {return this.userRepository.findOne(id);
    }

    @Overridepublic User findByNumber(String number) {return this.userRepository.findByNumber(number);
    }

    @Overridepublic List<User> findAllUserByPage(int page,int size) {
        Pageable pageable = new PageRequest(page, size);
        Page<User> users =  this.userRepository.findAll(pageable);return users.getContent();
    }

    @Overridepublic User updateUser(User user,boolean throwEx) {
        User userNew = this.userRepository.save(user);if(throwEx){throw new RuntimeException("throw a ex");
        }return userNew;
    }

    @Overridepublic void deleteUser(int id) {this.userRepository.deleteUser(id);
    }
}
Nach dem Login kopieren
@Service@Transactional("secondTransactionManager")public class OrderServiceImpl implements OrderService {

    @Autowiredprivate OrderRepository orderRepository;


    @Overridepublic Order findById(int id) {return this.orderRepository.findOne(id);
    }

    @Overridepublic Order updateOrder(Order order, boolean throwEx) {
        Order orderNew = this.orderRepository.save(order);if(throwEx){throw new RuntimeException("throw a ex");
        }return orderNew;
    }
}
Nach dem Login kopieren

知识扩展

1.如果采用传统jpa方式,@EnableJpaRepositories无需配置,配置了也无影响。实现方式如下:

ds1相关DaoImpl
Nach dem Login kopieren
@PersistenceContext
private EntityManager entityManager;

ds2相关DaoImpl
Nach dem Login kopieren
@PersistenceContext(unitName = "secondDs")
private EntityManager entityManager;

因为ds1的entityManger声明了@Primary,所以无需指明unitName,ds2必须指明。注入了准确的entityManager,就可以直接拿来操作数据库了。service层和上面一样的,@Transactional("xxxManager")指明事物管理器即可!


2.采用jdbcTemplate方式,直接注入到Service层对象即可,so easy!
Nach dem Login kopieren
@Autowired
private JdbcTemplate jdbcTemplate;

@Autowired
private TransactionTemplate transactionTemplate;

@Resource(name="jdbcTemplate2")
private JdbcTemplate jdbcTemplate2;

@Resource(name="transactionTemplate2")
private TransactionTemplate transactionTemplate2;


好了,spring boot 多数据源,完美解决! 而且三种数据库操作方法均支持,包括事物。已经经过实践证明了! 这是官方给出的最佳实践,只是官方文档没写细。导致整整坑了我几天。至此,spring boot框架的使用就告一段落了!
Nach dem Login kopieren
<br>
Nach dem Login kopieren
<br><br>
Nach dem Login kopieren
Nach dem Login kopieren
<br><br>
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonJava Spring Boot 1.5.4 konfiguriert mehrere Datenquellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Das Funktionsprinzip und die Konfigurationsmethode von GDM im Linux-System Das Funktionsprinzip und die Konfigurationsmethode von GDM im Linux-System Mar 01, 2024 pm 06:36 PM

Titel: Das Funktionsprinzip und die Konfigurationsmethode von GDM in Linux-Systemen. In Linux-Betriebssystemen ist GDM (GNOMEDisplayManager) ein gängiger Anzeigemanager, der zur Steuerung der grafischen Benutzeroberfläche (GUI)-Anmeldung und Benutzersitzungsverwaltung verwendet wird. In diesem Artikel werden das Funktionsprinzip und die Konfigurationsmethode von GDM vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Funktionsprinzip von GDM GDM ist der Display-Manager in der GNOME-Desktop-Umgebung. Er ist für den Start des X-Servers und die Bereitstellung der Anmeldeschnittstelle verantwortlich

Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Apr 28, 2024 am 11:46 AM

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

Verstehen Sie Linux Bashrc: Funktionen, Konfiguration und Verwendung Verstehen Sie Linux Bashrc: Funktionen, Konfiguration und Verwendung Mar 20, 2024 pm 03:30 PM

Grundlegendes zu Linux Bashrc: Funktion, Konfiguration und Verwendung In Linux-Systemen ist Bashrc (BourneAgainShellruncommands) eine sehr wichtige Konfigurationsdatei, die verschiedene Befehle und Einstellungen enthält, die beim Systemstart automatisch ausgeführt werden. Die Bashrc-Datei befindet sich normalerweise im Home-Verzeichnis des Benutzers und ist eine versteckte Datei. Ihre Funktion besteht darin, die Bashshell-Umgebung für den Benutzer anzupassen. 1. Bashrc-Funktionseinstellungsumgebung

So konfigurieren Sie eine Arbeitsgruppe im Win11-System So konfigurieren Sie eine Arbeitsgruppe im Win11-System Feb 22, 2024 pm 09:50 PM

So konfigurieren Sie eine Arbeitsgruppe in Win11. Eine Arbeitsgruppe ist eine Möglichkeit, mehrere Computer in einem lokalen Netzwerk zu verbinden, wodurch Dateien, Drucker und andere Ressourcen von Computern gemeinsam genutzt werden können. Im Win11-System ist die Konfiguration einer Arbeitsgruppe sehr einfach. Befolgen Sie einfach die folgenden Schritte. Schritt 1: Öffnen Sie die Anwendung „Einstellungen“. Klicken Sie zunächst auf die Schaltfläche „Start“ des Win11-Systems und wählen Sie dann die Anwendung „Einstellungen“ im Popup-Menü aus. Sie können auch die Tastenkombination „Win+I“ verwenden, um „Einstellungen“ zu öffnen. Schritt 2: Wählen Sie „System“. In der App „Einstellungen“ sehen Sie mehrere Optionen. Klicken Sie bitte auf die Option „System“, um die Seite mit den Systemeinstellungen aufzurufen. Schritt 3: Wählen Sie „Info“. Auf der Einstellungsseite „System“ sehen Sie mehrere Unteroptionen. bitte klicken

Interpretation und Best Practices der MyBatis Generator-Konfigurationsparameter Interpretation und Best Practices der MyBatis Generator-Konfigurationsparameter Feb 23, 2024 am 09:51 AM

MyBatisGenerator ist ein offiziell von MyBatis bereitgestelltes Codegenerierungstool, mit dem Entwickler schnell JavaBeans, Mapper-Schnittstellen und XML-Zuordnungsdateien generieren können, die der Datenbanktabellenstruktur entsprechen. Bei der Verwendung von MyBatisGenerator zur Codegenerierung ist die Einstellung der Konfigurationsparameter von entscheidender Bedeutung. Dieser Artikel beginnt aus der Perspektive der Konfigurationsparameter und untersucht eingehend die Funktionen von MyBatisGenerator.

So konfigurieren und installieren Sie FTPS im Linux-System So konfigurieren und installieren Sie FTPS im Linux-System Mar 20, 2024 pm 02:03 PM

Titel: So konfigurieren und installieren Sie FTPS im Linux-System. Im Linux-System ist FTPS ein sicheres Dateiübertragungsprotokoll. Im Vergleich zu FTP verschlüsselt FTPS die übertragenen Daten über das TLS/SSL-Protokoll, was die Datensicherheit verbessert Übertragung. In diesem Artikel stellen wir die Konfiguration und Installation von FTPS in einem Linux-System vor und stellen spezifische Codebeispiele bereit. Schritt 1: vsftpd installieren Öffnen Sie das Terminal und geben Sie den folgenden Befehl ein, um vsftpd zu installieren: sudo

Anleitung zum Einrichten eines lokalen Maven-Repositorys, um die Projekterstellung zu beschleunigen Anleitung zum Einrichten eines lokalen Maven-Repositorys, um die Projekterstellung zu beschleunigen Feb 24, 2024 pm 02:12 PM

Bringen Sie Ihnen Schritt für Schritt bei, wie Sie das lokale Maven-Lager konfigurieren: Verbessern Sie die Geschwindigkeit der Projekterstellung. Maven ist ein leistungsstarkes Projektmanagement-Tool, das in der Java-Entwicklung häufig verwendet wird. Es kann uns helfen, Projektabhängigkeiten zu verwalten, Projekte zu erstellen, Projekte zu veröffentlichen usw. Während des eigentlichen Entwicklungsprozesses stoßen wir jedoch manchmal auf das Problem einer langsamen Projektkonstruktionsgeschwindigkeit. Eine Lösung besteht darin, ein lokales Repository zu konfigurieren, um die Geschwindigkeit der Projekterstellung zu verbessern. In diesem Artikel erfahren Sie Schritt für Schritt, wie Sie das lokale Maven-Lager konfigurieren, um die Konstruktion Ihres Projekts effizienter zu gestalten. Warum müssen Sie ein lokales Lager konfigurieren?

Wo kann ich die Konfiguration meines Win11-Computers überprüfen? So finden Sie die Konfigurationsinformationen eines Win11-Computers Wo kann ich die Konfiguration meines Win11-Computers überprüfen? So finden Sie die Konfigurationsinformationen eines Win11-Computers Mar 06, 2024 am 10:10 AM

Wenn wir das Win11-System verwenden, müssen wir manchmal die Konfiguration unseres Computers überprüfen, aber viele Benutzer fragen auch, wo sie die Konfiguration des Win11-Computers überprüfen können. Tatsächlich ist die Methode sehr einfach. Benutzer können die Systeminformationen direkt unter Einstellungen öffnen und dann die Computerkonfigurationsinformationen anzeigen. Lassen Sie diese Website den Benutzern sorgfältig vorstellen, wie sie Informationen zur Win11-Computerkonfiguration finden. So finden Sie Informationen zur Win11-Computerkonfiguration. Methode 1: 1. Klicken Sie auf Start und öffnen Sie Computereinstellungen. 3. Auf dieser Seite können Sie Informationen zur Computerkonfiguration anzeigen. 2. Geben Sie im Eingabeaufforderungsfenster systeminfo ein und drücken Sie die Eingabetaste, um die Computerkonfiguration anzuzeigen.

See all articles