Spring 利用 Mongo 通过 JPA 实现

2024-02-26

我对 Spring 框架相当陌生,并且在设置我当前正在处理的项目时遇到了一些问题。我需要能够连接到两个不同的数据库,一个是 MongoDB,另一个是 MSSQL。我正在使用 JPA 连接到 MSSQL。

我遇到的问题是,当我希望它调用 MSSQL 时,它似乎试图调用 Mongo 数据库,而我不太确定如何告诉它要读取什么。我看过建议使用的帖子@Qualifier注释将其定向到正确的实现,但我认为这不适用于我的情况。

@RestController
@RequestMapping("/software")
public class SoftwareEndpoint {



    @Autowired
    SoftwareRepository repo;    


    /**********************************************************************************
    ********************************MSSQL calls****************************************
    ***********************************************************************************/
    @RequestMapping(value="/all",method=RequestMethod.GET,produces=MediaType.APPLICATION_JSON)
    String getAllSoftware(){

        System.out.println("Here1");
        List<Software> allSoftware = (List<Software>) repo.findAll();
        System.out.println("Here2");
        //rest of method and class

上面显示了我的控制器类的片段,其中包含我的 SoftwareRepository 的实例。我还在数据库调用之前和之后打印到输出流。

输出流仅显示“Here1”,继续打印出这一行:

2016-10-04 07:35:39.810  INFO 4236 --- [nio-8080-exec-2] org.mongodb.driver.cluster               : No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, all=[ServerDescription{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused: connect}}]}. Waiting for 30000 ms before timing out

然后在超时时抛出异常。

我没有本地运行的 mongo 实例,但是在部署应用程序的地方会有,但我不认为这是问题,因为在到达该端点时,它不应该调用 Mongo数据库,它应该尝试连接 MSSQL。

TLDR:如何指定 Spring 用于特定存储库或数据库调用的数据库实现?


spring中可以根据context中的配置连接不同的数据库。

以下代码用于连接 MySql 和 Mongo DB。如果您有 JDBC,则可以用 MSSQL 替代 MySql。查看http://jdbforms.sourceforge.net/UsersGuide/html/ch20s02.html http://jdbforms.sourceforge.net/UsersGuide/html/ch20s02.html了解 JDBC 连接的属性的含义。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg ref="mySqldataSource" /> <!-- Change the datasource to MSSQL-->
    </bean>

    <bean id="mySqldataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="removeAbandoned">
            <value>true</value>
        </property>
        <property name="removeAbandonedTimeout">
            <value>30</value>
        </property>
        <property name="driverClassName">
            <value>MSSQL_DRIVER_CLASS_NAME</value>
        </property>
        <property name="url">
            <value>MSSQL_DATABASE_URL</value>
        </property>
        <property name="username">
            <value>MSSQL_DB_USER_NAME</value>
        </property>
        <property name="password">
            <value>MSSQL_DB_PASSWORD</value>
        </property>
        <property name="maxIdle"> 
            <value>10</value>
        </property>
        <property name="maxActive"> 
            <value>10</value>
        </property>
        <property name="maxWait">
            <value>100000</value>
        </property>
        <property name="testOnBorrow">
            <value>false</value>
        </property>
        <property name="testWhileIdle">
            <value>false</value>
        </property>
        <property name="timeBetweenEvictionRunsMillis">
            <value>60000</value>
        </property>
        <property name="minEvictableIdleTimeMillis">
            <value>60000</value>
        </property>
        <property name="numTestsPerEvictionRun">
            <value>1</value>
        </property>
        <property name="defaultTransactionIsolation" value="1" />
        <property name="poolPreparedStatements" value="true" />
        <property name="maxOpenPreparedStatements" value="1" />
    </bean>

    <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"></bean>

下面是连接mongodb

    <mongo:db-factory dbname="mongoDbName" host="mongoServer" port="mongoPort"/>


    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    </bean>
    <mongo:repositories base-package="com.test.repoPackage"/> <!-- Package containing the mongo repository interfaces -->

现在你可以使用spring提供的存储库了。

EDIT 1:假设配置名称是 springConfig.properties。在上面 mongo:db-factory 中的属性 dbname、host 和 port 的示例中,您可能希望在 springConfig.properties 中配置这些值。所以让我们在下面命名它们:

mongoServer = xxx.xx.xxx.xxx
mongoPort = 27017
mongoDb = testDb

现在需要修改上下文文件以导入 springConfig.properties。这是在上下文文件中按如下方式完成的:

<bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="locations" >
            <list>              
                <value>classpath:/log4j.properties</value>
                <value>classpath:/springConfig.properties</value>
            </list>
        </property>
    </bean>

bean mongo:db-factory 现在看起来像:

<mongo:db-factory dbname="${mongoDb}" host="${mongoServer}" port="${mongoPort}"/>

请注意,配置中的“键”(数据库名称、主机和端口)在 ${} 中表示。这将替换为键配置中的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 利用 Mongo 通过 JPA 实现 的相关文章

随机推荐

  • Oracle:是否可以为模式创建同义词?

    Firstly 我是一个oracle新手 并且我没有当地的oracle大师来帮助我 这是我的问题 问题 我有一些 SQL 脚本必须发布到多个 Oracle 实例 这些脚本创建存储过程 创建存储过程的架构与包含存储过程从中读取的表的架构不同
  • 在 PYOMO 中为 2 个变量定义特定值集

    我正在尝试使用多个变量分配材料属性 例如 密度和电导率是材料 1 材料 2 和材料 3 的两个决策变量 我必须输入以下信息 density of material 1 1000 density of material 2 2000 dens
  • 使用 Spring Boot 异步自定义 ThreadPoolTask​​Executor

    我有一个 Spring Boot 应用程序 负责通过 REST 应答请求 我还推送有关我的应用程序调用的指标 由于这是一项单独的任务 并且我必须立即响应用户 因此我希望异步发布该指标 所以我用过 ThreadPoolTaskExecutor
  • C# 中的双按位非 (~~)

    我一直在读ThreadLocal
  • 我可以在 DDD 中拥有“不完整”的聚合吗?

    DDD 规定您只能通过实体的聚合根来访问实体 举例来说 你有一个聚合根 X 它可能有一个lot子 Y 实体的数量 现在 对于某些场景 您一次只真正关心这些 Y 实体的子集 也许您将它们显示在分页列表或其他内容中 那么是否可以实现一个存储库
  • 如何修复 oh-my-zsh 插件无法工作的问题

    我刚刚发现了 oh my zsh 但我无法让它工作 虽然主题可以完美地工作 但插件却不能 我选择了一些插件 例如 macports 但我既没有完成端口命令 也没有适当的别名工作 这是我的 zshrc Path to your oh my z
  • 使用 React 在 Material UI 对话框中形成表单

    我正在尝试让一个表单在 Material UI Dialog 组件中工作 如果我将对话框包装在表单标签中 它们甚至不会出现在生成的 html 中 还不知道为什么
  • 有 HTML5 注册机示例吗?

    我很难理解如何使用
  • 比较 Struts2 标签中的字符串

    我有一个index jsp页面 其中某些元素根据用户是否登录而打开 关闭
  • Laravel MIME 验证

    我遇到了一个麻烦 关于使用 Laravel 验证 JavaScript 文件的上传 其中验证规则是 javascript file gt required mimes js 据我所知 这应该有效 因为 Laravel 使用mime cont
  • 在 Android 中将应用程序上下文放入静态方法的最佳方法

    我正在开发一个具有多个活动的 Android 应用程序 其中我有一个带有几个静态方法的类 我希望能够从不同的活动中调用这些方法 我使用静态方法通过 XmlResourceParser 从 xml 文件加载数据 要创建 XmlResource
  • Coinbase Python API 上的分页

    我正在尝试获取 Coinbase 帐户上的所有交易 这需要分页 这文档 https developers coinbase com api v2 javascript pagination关于如何在 Python 中执行此操作的信息很少 但
  • 如何使用 Selenium 和 C# 删除元素属性?

    下面是我想要从中删除 disabled disabled 并关闭开发工具窗口的html块 我正在使用 selenium webdriver 和 c 谢谢 a class btn btn success href Click to Submi
  • 集合是确定性的吗? [复制]

    这个问题在这里已经有答案了 当阅读诸如此类的问题时从 python 中的列表中获取唯一值 https stackoverflow com questions 12897374 get unique values from a list in
  • Process的Exited事件没有发生?

    在我的应用程序中 我打开一个 Excel 工作表以向用户显示我的 Excel 文档之一 但在显示 Excel 之前 我将其保存到本地计算机中的一个文件夹中 该文件夹实际上将用于显示 当用户关闭应用程序时 我希望关闭打开的 Excel 文件并
  • 如何用 Unicode 表示上标斜杠?

    有什么办法可以用 Unicode 写上标斜杠吗 我的目标是以比123 456 789 那么 unicode 充满了字符 其含义取决于其解释 对于上标斜杠 您可以使用 加拿大音节最终急性 https unicode table com en
  • JavaScript 和继承

    说我有一个Class function Foo this foo1 null this foo2 function return false 我希望其他对象继承它的变量和函数 function Bar function Baz 然后实例化我
  • 获取 html 后使用 MailApp 发送表单。将 Google 表单嵌入到电子邮件中。生成的电子邮件仅包含文本

    我想在电子邮件中嵌入 Google 表单并使用 MailApp 发送 我正在尝试使用以下位置的代码 https stackoverflow com a 23671529 4305236 https stackoverflow com a 2
  • Sql 查询仅返回第一行

    我尝试显示选择查询的结果 但我只得到重复的第一行而不是所有行 这是我的代码 query SELECT Email from client result db gt query query gt fetch foreach result as
  • Spring 利用 Mongo 通过 JPA 实现

    我对 Spring 框架相当陌生 并且在设置我当前正在处理的项目时遇到了一些问题 我需要能够连接到两个不同的数据库 一个是 MongoDB 另一个是 MSSQL 我正在使用 JPA 连接到 MSSQL 我遇到的问题是 当我希望它调用 MSS