{"id":2313,"date":"2021-07-20T21:18:03","date_gmt":"2021-07-20T12:18:03","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2313"},"modified":"2021-07-20T11:35:35","modified_gmt":"2021-07-20T02:35:35","slug":"spring-boot-jpa-%eb%a9%80%ed%8b%b0-%eb%8d%b0%ec%9d%b4%ed%83%80%ec%86%8c%ec%8a%a4","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2313","title":{"rendered":"Spring Boot JPA \uba40\ud2f0 \ub370\uc774\ud0c0\uc18c\uc2a4"},"content":{"rendered":"<h1>Spring Boot JPA \uba40\ud2f0 \ub370\uc774\ud0c0\uc18c\uc2a4<\/h1>\n<h2>\ubaa9\ud45c<\/h2>\n<p>\ub450\uac1c \uc774\uc0c1\uc758 \ub370\uc774\ud0c0\uc18c\uc2a4\ub97c \uc124\uc815\ud569\ub2c8\ub2e4.<\/p>\n<h2>application.yml<\/h2>\n<p>\uae30\uc874 \ud558\ub098\uc758 \ub370\uc774\ud0c0\uc18c\uc2a4 \uc124\uc815\uc5d0\uc11c \ub450\uac1c \uc774\uc0c1\uc758 \ub370\uc774\ud0c0\uc18c\uc2a4\ub97c \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>\n<code>url<\/code> \uc124\uc815\uacfc <code>jdbc-url<\/code> \uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub450\uac1c\uc758 \ub370\uc774\ud0c0\uc18c\uc2a4\ub294 \uc544\uc774\ud53c\uac00 \ub2ec\ub77c\ub3c4 \ub418\uace0, \ub370\uc774\ud0c0\ubca0\uc774\uc2a4\uc758 \uc885\ub958\uac00 \ub2ec\ub77c\ub3c4 \ub429\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-yaml\">spring:\n#  datasource:\n#    url: jdbc:sqlserver:\/\/XXX.XXX.XXX.XXX;databaseName=db_order\n#    # url: jdbc:log4jdbc:sqlserver:\/\/XXX.XXX.XXX.XXX;databaseName=db_order\n#    username: -\n#    password: -\n#    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver\n#    # driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy\n  datasource:\n    db-main:\n      url: jdbc:sqlserver:\/\/XXX.XXX.XXX.XXX;databaseName=db_order\n      jdbc-url: jdbc:sqlserver:\/\/XXX.XXX.XXX.XXX;databaseName=db_order\n      username: -\n      password: -\n      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver\n    db-item:\n      url: jdbc:sqlserver:\/\/XXX.XXX.XXX.XXX;databaseName=db_item\n      jdbc-url: jdbc:sqlserver:\/\/XXX.XXX.XXX.XXX;databaseName=db_item\n      username: -\n      password: -\n      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver<\/code><\/pre>\n<h2>DataSourceProperties.java<\/h2>\n<p>\ub370\uc774\ud0c0\uc18c\uc2a4\ub97c \uc77d\ub294 \uc124\uc815\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Configuration\n@EnableConfigurationProperties\npublic class DataSourceProperties {\n\n    @Bean(name = &quot;mainDataSource&quot;)\n    @Qualifier(&quot;mainDataSource&quot;)\n    @Primary\n    @ConfigurationProperties(prefix = &quot;spring.datasource.db-main&quot;)\n    public DataSource mainDataSource() {\n        return DataSourceBuilder.create().type(HikariDataSource.class).build();\n    }\n\n    @Bean(name = &quot;itemDataSource&quot;)\n    @Qualifier(&quot;itemDataSource&quot;)\n    @ConfigurationProperties(prefix = &quot;spring.datasource.db-item&quot;)\n    public DataSource itemDataSource() {\n        return DataSourceBuilder.create().type(HikariDataSource.class).build();\n    }\n}<\/code><\/pre>\n<h2>MainDataSourceConfig.java<\/h2>\n<p>\ud328\ud0a4\uc9c0 \uae30\uc900\uc73c\ub85c \ub370\uc774\ud0c0\uc18c\uc2a4\uac00 \ud560\ub2f9\ub429\ub2c8\ub2e4.<\/p>\n<p>\ub530\ub77c\uc11c Entity\/Repository \ud074\ub798\uc2a4\ub294 \ub370\uc774\ud0c0\uc18c\uc2a4\ubcc4\ub85c \ubd84\ub9ac\ud574\uc11c \ubc30\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc911\uc694 \ub370\uc774\ud0c0\uc18c\uc2a4 \ucabd\uc5d0 <code>@Primary<\/code> \ub97c \ubd99\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Configuration\n@EnableTransactionManagement\n@EnableJpaRepositories(\n        entityManagerFactoryRef = &quot;mainEntityManagerFactory&quot;,\n        transactionManagerRef = &quot;mainTransactionManager&quot;,\n        basePackages = { &quot;kr.pe.skyer9.csapi.domain.db_main&quot; })\npublic class MainDataSourceConfig {\n\n    @Autowired\n    @Qualifier(&quot;mainDataSource&quot;)\n    private DataSource mainDataSource;\n\n    @Primary\n    @Bean(name = &quot;mainEntityManagerFactory&quot;)\n    public LocalContainerEntityManagerFactoryBean mainEntityManagerFactory(EntityManagerFactoryBuilder builder) {\n        return builder\n                .dataSource(mainDataSource)\n                .packages(&quot;kr.pe.skyer9.csapi.domain.db_main&quot;)\n                .persistenceUnit(&quot;main&quot;)\n                .build();\n    }\n\n    @Primary\n    @Bean(&quot;mainTransactionManager&quot;)\n    public PlatformTransactionManager mainTransactionManager(EntityManagerFactoryBuilder builder) {\n        return new JpaTransactionManager(mainEntityManagerFactory(builder).getObject());\n    }\n}<\/code><\/pre>\n<h2>itemDataSourceConfig.java<\/h2>\n<pre><code class=\"language-java\">@Configuration\n@EnableTransactionManagement\n@EnableJpaRepositories(\n        entityManagerFactoryRef = &quot;itemEntityManagerFactory&quot;,\n        transactionManagerRef = &quot;itemTransactionManager&quot;,\n        basePackages = { &quot;kr.pe.skyer9.csapi.domain.db_item&quot; })\npublic class itemDataSourceConfig {\n\n    @Autowired\n    @Qualifier(&quot;itemDataSource&quot;)\n    private DataSource itemDataSource;\n\n    @Bean(name = &quot;itemEntityManagerFactory&quot;)\n    public LocalContainerEntityManagerFactoryBean itemEntityManagerFactory(EntityManagerFactoryBuilder builder) {\n        return builder\n                .dataSource(itemDataSource)\n                .packages(&quot;kr.pe.skyer9.csapi.domain.db_item&quot;)\n                .persistenceUnit(&quot;item&quot;)\n                .build();\n    }\n\n    @Bean(&quot;itemTransactionManager&quot;)\n    public PlatformTransactionManager itemTransactionManager(EntityManagerFactoryBuilder builder) {\n        return new JpaTransactionManager(itemEntityManagerFactory(builder).getObject());\n    }\n}<\/code><\/pre>\n<h2>Service \ub808\uc774\uc5b4<\/h2>\n<p>\uac00\ub054 \ud504\ub85c\uc2dc\uc838 \ud638\ucd9c \ub4f1\uc758 \uc774\uc720\ub85c \uc11c\ube44\uc2a4 \ub808\uc774\uc5b4\uc5d0\uc11c <code>EntityManager<\/code> \ub97c \uc0dd\uc131\ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7f0 \uacbd\uc6b0 <code>@RequiredArgsConstructor<\/code> \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uace0,<br \/>\n<code>@Qualifier(&quot;mainEntityManagerFactory&quot;)<\/code> \uc640 \uac19\uc774 Bean \uc744 \uba85\uc2dc\ud574 \uc8fc\uc5b4\uc57c \uc815\uc0c1 \uc791\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-java\">\/\/ @RequiredArgsConstructor\n@Service\npublic class OrderMasterService {\n\n    private final OrderMasterMapper mapper = Mappers.getMapper(OrderMasterMapper.class);\n    private final OrderMasterRepository orderMasterRepository;\n\n    private final EntityManager entityManager;\n\n    public OrderMasterService(OrderMasterRepository orderMasterRepository, @Qualifier(&quot;mainEntityManagerFactory&quot;) EntityManager entityManager) {\n        this.orderMasterRepository = orderMasterRepository;\n        this.entityManager = entityManager;\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Spring Boot JPA \uba40\ud2f0 \ub370\uc774\ud0c0\uc18c\uc2a4 \ubaa9\ud45c \ub450\uac1c \uc774\uc0c1\uc758 \ub370\uc774\ud0c0\uc18c\uc2a4\ub97c \uc124\uc815\ud569\ub2c8\ub2e4. application.yml \uae30\uc874 \ud558\ub098\uc758 \ub370\uc774\ud0c0\uc18c\uc2a4 \uc124\uc815\uc5d0\uc11c \ub450\uac1c \uc774\uc0c1\uc758 \ub370\uc774\ud0c0\uc18c\uc2a4\ub97c \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. url \uc124\uc815\uacfc jdbc-url \uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub450\uac1c\uc758 \ub370\uc774\ud0c0\uc18c\uc2a4\ub294 \uc544\uc774\ud53c\uac00 \ub2ec\ub77c\ub3c4 \ub418\uace0, \ub370\uc774\ud0c0\ubca0\uc774\uc2a4\uc758 \uc885\ub958\uac00 \ub2ec\ub77c\ub3c4 \ub429\ub2c8\ub2e4. spring: # datasource: # url: jdbc:sqlserver:\/\/XXX.XXX.XXX.XXX;databaseName=db_order # # url: jdbc:log4jdbc:sqlserver:\/\/XXX.XXX.XXX.XXX;databaseName=db_order # username: &#8211; # password: &#8211; # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver #\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=2313\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2313","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2313"}],"version-history":[{"count":1,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2313\/revisions"}],"predecessor-version":[{"id":2315,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2313\/revisions\/2315"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}