java使用Springboot Spring Data JPA在Oracle、MySQL数据库中创建用户
我对Springboot和Spring Data JPA非常陌生,正在研究一个用例,需要在不同的数据库中创建用户。 应用程序将从队列接收2个输入——用户名和数据库名。 使用它,我必须在给定的数据库中配置给定的用户。 我无法理解项目架构。 因为我需要运行的查询的格式是——创建由密码标识的用户ABC; 项目在模型类、存储库等方面应该是什么样子?因为我没有一个实际的表来运行查询,所以我需要一个模型类,因为这样就不会发生列映射
TLDR-帮助构建Springboot Spring Data JPA应用程序,该应用程序配置了多个数据源,以运行以下格式的查询:创建由密码标识的用户
我一直在使用这个GitHub repo作为参考-https://github.com/jahe/spring-boot-multiple-datasources/blob/master/src/main/java/com/foobar
# 1 楼答案
我将在这里做一些假设:
Oracle
:create user ABC identified by password
不幸的是,我不能仅仅提供代码,因为设置它需要一些工作,但我可以给你一些要点
方法1:使用JPA
User
实体和相应的UserRepository
。将实体绑定到all_users
表。主键可能是USERNAME
或USER_ID
列。。。但这并不重要,因为你不会在表中插入任何内容李>UserRepository
添加一个专用方法,在@NativeQuery
注释中指定用户创建查询。它应该是现成的李>理论上,上述内容涵盖了使用JPA在给定数据库中创建和列出用户
如果此时您的数据库数量有限(因此已知的JNDI数据源数量有限),那么可以按照您引用的GitHub示例中所示的方式进行操作,为每个不同的
DataSource
提供不同的@Configuration
类,每个类的相关(相同)存储库位于一个单独的包中当然,您必须添加一些逻辑,以便适当地选择用于操作的
JpaRepository
这将导致一些代码重复,并且只有在需求随着时间的推移保持非常简单的情况下才能很好地工作。也就是说:如果你的“微服务”需要做的只是创建/列出(可能还有删除)用户,并且随着时间的推移,数据源的数量仍然很小,因为每个新的数据源都需要你添加新的类、重新编译和重新部署微服务,那么它是有效的
或者,尝试下面提出的方法: https://www.endpoint.com/blog/2016/11/16/connect-multiple-jpa-repositories-using
然而,就我个人而言,我会把JPA完全排除在外,因为动态配置任意
DataSource
对象并重新配置存储库,使其每次都能针对不同的DataSource
工作,是非常不容易的。上述解决方案将迫使您在这样一个简单的应用程序上进行持续维护我要做的就是坚持使用
NamedParameterJdbcTemplate
初始化它。例如:如果您的容器已经定义了JNDI数据源,那么上面的代码应该包括用户的创建和用户列表。不需要定义实体、存储库或其他任何东西。您甚至不必在spring中定义数据源。上面的代码(您必须测试)是您真正需要的全部代码,因此您可以将其连接到
@Controller
中并使用它如果不使用JNDI,也没有问题:可以使用
HikariCP
来定义数据源,并提供附加参数作为参数无论您拥有多少不同的数据源,这个解决方案都可以工作,并且不需要重新部署,除非您真的需要使用它的功能。此外,它不需要开发人员了解JPA,也不需要将配置分散到所有地方