java - 使用Spring Boot在Oracle
该应用程序将从队列接收2个输入-用户名和数据库名称。
使用此方法,我必须在给定的数据
我是Springboot和Spring Data JPA的新手,正在研究一个用例,该用例需要在不同的数据库中创建用户。 该应用程序将从队列接收2个输入-用户名和数据库名称。 使用此方法,我必须在给定的数据库中设置给定的用户。 我无法理解项目架构。 由于我需要运行的查询将采用以下格式-创建由密码标识的用户ABC; 在模型类,存储库等方面,项目的外观如何?由于我没有要针对其运行查询的实际表,因此我需要一个模型类,因为这样就不会发生任何列映射。 TLDR-帮助构造Springboot-Spring Data JPA应用程序,该应用程序配置有多个数据源,以运行以下格式的查询:创建由密码标识的用户 我一直在使用此GitHub存储库作为参考- 最佳答案 我将在此处进行一些假设: 根据提供的语法,您选择的数据库为Oracle:create user ABC identified by password 您要创建并列出用户 您的数据库是众所周知的,并在JNDI中定义 不幸的是,我不能仅仅提供代码,因为设置代码会花费我一些时间,但是我可以为您提供要点。 方法1:使用JPA 首先,创建一个User实体和相应的UserRepository。将实体绑定到all_users表。主键可能是USERNAME或USER_ID列...但是这并不重要,因为您不会在该表中进行任何插入。 要创建用户,请在您自己的UserRepository中添加专用方法,以在@NativeQuery批注中指定用户创建查询。它应该开箱即用。 列出用户mysql数据库,您无需执行任何操作,因为此时您的实体已绑定到正确的表。只需在存储库中调用适当的(并且已经存在)方法即可。 理论上,以上内容涵盖了使用JPA在给定数据库中创建和列出用户的过程。 如果此时数据库数量有限(因此,有限数量的知名JNDI数据源),则可以按引用的GitHub示例所示进行操作,方法是为每个不同的@Configuration提供不同的DataSource类,每个都具有相关的(相同的)存储库,这些存储库位于单独的程序包中。 当然,您将必须添加一些逻辑,这些逻辑将允许您适当地选择JpaRepository用于操作。 这将导致某些代码重复,并且仅在需求随时间推移保持非常简单的情况下才能正常工作。也就是说:如果您所有的“微服务”都需要做的就是创建/列出(甚至删除)用户,并且随着时间的推移数据源的数量仍然很少,那么这是可行的,因为每个新的数据源都需要您添加新的类,重新编译并重新部署微服务。 或者,尝试使用此处提出的方法: 但是,就我个人而言,我会完全抛弃JPA,因为除了动态地配置任意DataSource对象并重新配置存储库以使其每次针对不同的DataSource进行工作之外,这都很容易,并且上述解决方案将迫使您不断进行此类维护。一个简单的应用程序。 我会坚持使用NamedParameterJdbcTemplate通过使用JndiTemplate对其进行初始化。例:
假设您的容器已经定义了JNDI数据源,则上面的代码应涵盖用户的创建和用户列表。无需定义实体或存储库或其他任何东西。您甚至不必在spring @Configuration中定义数据源。上面的代码(您将必须测试)实际上就是您所需要的,因此您可以将其连接到@Controller中并完成它。 如果您不使用JNDI,也没有问题:您可以使用HikariCP定义数据源,并提供其他参数作为参数。 无论您拥有多少个不同的数据源,该解决方案都将起作用,并且除非您真的需要使用其功能,否则不需要重新部署。另外,它不需要开发人员了解JPA,也不需要将配置散布到各处。 (编辑:沈阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |