Spring事务通过连接多个数据库

2023-12-07

我正在尝试开发一个小程序,在该程序中我可以使用 Spring 连接到多个数据库,并尝试通过在 weblogic 服务器上部署我的 Web 应用程序来使用 Spring 事务。问题是事务管理无法正常工作。我试图在两个数据库中插入记录,第一个数据库插入时不会引发任何异常,而第二个插入查询的编写会引发异常。理想情况下,在这种情况下,事务应该回滚,但第一个事务会毫无问题地提交。

这是我的spring-config.xml file

<context:component-scan base-package="com.examples" />

<!-- Database1 -->

<bean id="db1DataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydb1" />
    <property name="username" value="root" />
    <property name="password" value="" />
</bean>

<!-- Database2 -->

<bean id="db2DataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydb2" />
    <property name="username" value="root" />
    <property name="password" value="" />
</bean>

<tx:annotation-driven transaction-manager="txManager" />
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />

<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix">
        <value>/WEB-INF/views/</value>
    </property>
    <property name="suffix" value=".jsp" />
</bean>

这是我的控制器:

@Controller
public class EmployeeController {

    @Autowired
    private CommonEmployeeService commonService;

    @RequestMapping(value = "/employee", method = GET)
    public String showPersonListForGivenAge(
            @RequestParam(value = "id") int id,
            @RequestParam(value = "name") String name,
            @RequestParam(value = "email") String email,
            Map<String, Object> model) {

        Employee e = new Employee(id,name);
        EmployeeDetails details = new EmployeeDetails(id,email);

        commonService.insert(e, details);

        return "welcome";
    }
}

这是我的共同服务:

@Service
public class CommonEmployeeService {

    @Autowired
    EmployeeDetailsService detailsService;

    @Autowired
    EmployeeService service;


    @Transactional
    public boolean insert(Employee e, EmployeeDetails details) {
        service.insert(e);
        detailsService.insert(details);
        return true;
    }
}

这些是我的其他服务:

EmployeeService.java

@Service

public class EmployeeService {

    @Autowired
    EmployeeDao dao;

    //@Transactional(propagation=Propagation.REQUIRED)
    public boolean insert(Employee e) {
        return dao.insert(e);
    }
}

EmployeeDetailsS​​ervice.java-- 该服务中的 DAO 抛出NullPointerException

@Service
public class EmployeeDetailsService {

    @Autowired
    EmployeeDetailsDao dao;

    //@Transactional(propagation=Propagation.REQUIRED)
    public boolean insert(EmployeeDetails e) {
        return dao.insert(e);
    }

}

Update:添加 Dao 类:

EmployeeDao.java:

@Repository
public class EmployeeDao {

    JdbcTemplate template;

    @Resource(name = "db1DataSource")
    public void setDataSource(DataSource dataSource) {
        this.template = new JdbcTemplate(dataSource);
    }

    public boolean insert(Employee e) {
        int cnt = template.update("insert into Employee values(?,?)",
                e.getId(), e.getName());
        if (cnt > 0) {
            return true;
        }
        return false;
    }
}

EmployeeDetailsDao.java

@Repository
public class EmployeeDetailsDao {

    JdbcTemplate template;

    @Resource(name = "db2DataSource")
    public void setDataSource(DataSource dataSource) {
        this.template = new JdbcTemplate(dataSource);
    }

    public boolean insert(EmployeeDetails e) {
        if(e != null){
            throw new NullPointerException();   
        }

        int cnt = template.update("insert into EmployeeDetails values(?,?)",
                e.getId(), e.getEmail());
        if (cnt > 0) {
            return true;
        }
        return false;
    }
}

尝试在下面添加spring-config.xml:

<context:component-scan base-package=“your.packagename.contatining.EmployeeDetailsDao” />
<mvc:annotation-driven />

和改变@Transactional在你的CommonEmployeeService with @Transactional(rollbackFor=Exception.class, propagation=Propagation.REQUIRED)如下

@Service
public class CommonEmployeeService {

    @Autowired
    EmployeeDetailsService detailsService;

    @Autowired
    EmployeeService service;

@Transactional(rollbackFor=Exception.class, propagation=Propagation.REQUIRED)
    public boolean insert(Employee e, EmployeeDetails details) {
        service.insert(e);
        detailsService.insert(details);
        return true;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring事务通过连接多个数据库 的相关文章

  • 如何在不改变的情况下将字符串转换为字节?

    我需要一个解决方案将字符串转换为字节数组而不需要像这样进行更改 Input String s Test Output String s Test byte b Test 当我使用 s getBytes 那么回复是 B 428b76b8 但我
  • Spring Rest POST Json RequestBody 不支持内容类型

    当我尝试使用 post 方法发布新对象时 RequestBody 无法识别 contentType Spring 已经配置完毕 POST 可以与其他对象一起使用 但不能与这个特定对象一起使用 org springframework web
  • 使用 spring security 找不到 AuthenticationProvider

    我一直在尝试使用 x509 证书通过 LDAP 对用户进行身份验证 但似乎无法正常工作 我声明了一个身份验证提供程序 但仍然抛出错误 提示没有提供程序 这是我的调试输出 INFO Initiating Jersey application
  • 如何在JUnit测试中将MockWebServer端口设置为WebClient?

    我在用着spring boot with WebClient 它被自动装配为一个 bean 问题 写一个junit集成测试 我必须使用okhttpMockWebServer 该模拟始终在随机端口上启动 例如localhost 14321 N
  • JPA 为每个项目选择最新实例

    假设我有一个会议实体 每次会议都有一个与会者和一个会议日期 在我的会议表中 我可能为每个与会者举行多个会议 每个会议都有不同的日期 我需要一个 JPA 查询 该查询将为所有与会者仅选择最新的会议 例如 如果我的桌子看起来像这样 Meetin
  • 为什么不能将 String 添加到 List 类型?

    错误 The method add capture 1 of in the type List
  • 嵌套枚举是静态的吗?

    读书时这个问题 https stackoverflow com questions 25011061 why can enum implementations not access private fields in the enum cl
  • Spring中是否可以禁用自动验证

    我有一个 Spring 启动应用程序 我的请求类传递给我的 RestController包含javax validation我无法更改 删除的注释 它们作为第三方库提供 所以我想手动验证我的请求对象或者根本不验证它们 不幸的是 如果我添加
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • 如何加快 jar 签名者的速度?

    我使用 ant 来签署我的 jars 以进行网络启动部署 Ant signjar 在 Web 启动签名时非常慢 如何加快签名过程 我找到了一种可能的解决方案 早些时候 在构建脚本 ant signjar 中 按顺序调用所有 jar 我们使用
  • Ubuntu 的打包 - Web 应用程序

    Web 应用程序没有与 C 或类似文件不同的 make 文件 但是 它需要放置在特定的目录中 例如 var www 我是 Linux 打包新手 所以我的问题是 如何将我的应用程序打包到 deb 中 以便在安装时将其放入 etc myprog
  • 在Java中使用==而不是equals来比较不可变对象可以吗

    考虑调用静态工厂方法 valueOf 的两个 Integer 类型的引用 如下所示 Integer a Integer valueOf 10 Integer b Integer valueOf 10 考虑到Integer是不可变的 使用 而
  • 这个finally子句包含close()调用的原因是什么

    我正在学习在线java课程 使用 Java 编程简介 http math hws edu javanotes index html 在 I O 章节中 引入了以下代码 顺便说一下 在本程序的末尾 您将发现我们第一个有用的 try 语句中的
  • 在Java程序中计算zip文件的md5哈希值

    我有一个 zip 文件 在我的 Java 代码中我想计算 zip 文件的 md5 哈希值 有没有我可以用于此目的的 java 库 一些例子将非常感激 谢谢 几周前我通过这篇文章做到了这一点 http www javalobby org ja
  • 如何映射 Map

    I tried ManyToMany cascade CascadeType ALL Map
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • Java 中的可迭代求和?

    有没有一个库可以做到这一点 public class Iterables private Iterables public static
  • Web 应用程序似乎启动了名为 [22] 的线程,但未能停止它。这很可能造成内存泄漏

    我有一个 Web 应用程序 后端有 Servlet 部署在 tomcat 上 该应用程序是简单的java应用程序 我经常在服务器日志中看到此错误 严重 Web 应用程序似乎启动了一个名为 22 但未能阻止它 这很有可能 造成内存泄漏 是否存
  • 在 Vavr 中结合任一者?

    我有几个Vavr https www vavr io Either https www vavr io vavr docs either的 我想调用一个函数Right每个 Either 的值 例如 Either
  • Java applet 是否会违反同源策略

    我需要请求一些东西并从其他域获取信息 我知道由于同源政策 javascript 无法做到这一点 我的另一个选择是通过我的服务器发出代理请求 我不希望请求来自我的服务器的 IP 也不想为我的服务器创建额外的负载 并且希望客户端这样做 是否可以

随机推荐

  • Java 中的 HashMap 实现。桶索引计算是如何进行的?

    我正在研究实施HashMap在Java中 我陷入了困境 怎么样indexFor函数计算 static int indexFor int h int length return h length 1 Thanks 哈希本身是通过以下方式计算的
  • 自定义 ArrayAdapter 上的可点击行

    我为 ListView 制作了一个自定义 ArrayAdapter 以便使用某些元素自定义列表的行 我遇到的问题是我无法选择一个项目 单击时没有任何反应 我必须在自定义 ArrayAdapter 中实现它吗 它只有一个构造函数和一个 get
  • 如何在母版页标题中包含jquery而不出现路径问题?

    我已经尝试过这个 scripts jquery 1 5 1 min js gt gt
  • 是否可以通过 url 将文件上传到应用程序引擎上的云存储而不写入磁盘?

    要将文件从url上传到云存储系统 通常需要将该文件下载到服务器上 然后将其上传到云存储 对于大文件 可能需要将文件写入磁盘而不是内存 由于应用程序引擎不支持在磁盘上写入 因此还有其他选项可以在应用程序引擎上执行此操作吗 我知道托管虚拟机是一
  • 无法在 WinForms 设计器中选择 Infragistics 控件

    我刚刚升级了 2006 年至 2011 年一个项目的 Infragistics 控件 现在 如果我打开包含任何 Infragistics 控件的表单的设计器 Infragistics 控件将显示在表单设计器下方的单独面板中 并且我无法在设计
  • CTR 中的 AES 如何与 PyCrypto 一起用于 Python?

    我正在使用 python 2 7 1 我想在 CTR 模式下使用 AES 进行加密 我为 python 安装了 PyCrypto 库 我写了以下代码 secret os urandom 16 crypto AES new os urando
  • 如何使用本地构建的 nuget 包进行调试?

    我们有几个项目使用共享的公共库 内部的 非公共的 C net 项目 使用 Visual Studio 设置作为解决方案 Solution A gt Common Library Nuget Package Solution B 一般来说 这
  • 单击按钮 Javascript 即可触发文件下载,其中包含 DOM 中的内容

    我想下载一个从 DOM 元素创建的文件 因此 用户单击网页上的按钮 它会调用 JavaScript 方法 该方法可以获取 DOM 元素的内容并提示用户下载 我能够获取 Javascript Var 中 DOM 元素的内容 但不确定如何进一步
  • 在当前 HTTPContext 中生成新的 ASP.NET 会话

    对我们正在开发的一些产品进行渗透测试的结果是 当时看似 容易 解决的问题却变得棘手 当然不是应该的 我的意思是为什么会这样为当前生成一个全新的会话HTTPContext有那么难吗 奇怪 不管怎样 我写了一个厚颜无耻的小实用程序类来 就这么做
  • Android 切换按钮自定义外观

    我一直在尝试自定义切换按钮的外观 但没有成功 这是我想要的样子 有人可以给我一个教程吗 在res drawable中创建toggle selector xml
  • 为什么 JSON.parse("string") 失败

    根据JSON规范字符串是合法的 JSON 值 那么为什么会发生这种情况呢 你实际上是在传递赤裸裸的话语string到函数中 这当然不是有效的 JSON 要真正传递value string 你需要小心你的 JavaScript 尝试这个 JS
  • 查看完整网站,而非 iPhone 上的移动版本

    我有一个脚本可以检测您是否是 iPhone 用户并重定向到对 iPhone 更友好的页面 这很好用 但有一个问题 惯例是让用户能够查看full网页 但是 如果我链接到根目录 显然重定向会将它们发送到移动版本 有关如何包含的任何想法 请点击以
  • 将多行数据合并到一列中

    我有一个这样的数据 year Male 1 2011 8 2 2011 1 3 2011 4 4 2012 3 5 2012 12 6 2012 9 7 2013 4 8 2013 3 9 2013 3 我需要将 2011 年的数据分组到一
  • 如何在“func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -> SCNNode”中旋转 SCNNode?

    因此 我能够在锚点位置放置一个盒子节点 现在 如何旋转场景中的 SCNNode 我试图修改节点的变换和 eulerAngles 但它们没有效果 func renderer renderer SCNSceneRenderer nodeFor
  • 位图图像处理

    我想使用 LockBits 方法替换 GetPixel 和 SetPixel 所以我遇到了这个F 惰性像素读取 open System Drawing open System Drawing Imaging let pixels image
  • Xquery 中的标记化

    如何标记特殊字符 例如 and 在 xquery 正如我正在努力Tokenize这些特殊字符 我无法做到这一点 你能建议我解决这个问题吗 您必须像在 XML 中一样转义 符号 tokenize string amp 或者 您也可以使用它的
  • 通过触摸或手势识别移动 RecyclerView

    我正在尝试移动和扩展 RecyclerView 以便内容在触摸输入的基础上占据全屏 我希望 RecyclerView 保持左右滚动的能力 我无法让 GestureDetector 与 RecyclerView 一起正常工作 捕获 onScr
  • iOS:在 uiimage 上具有发光/阴影效果的羽毛

    我正在尝试找到一种方法来应用带有阴影的羽毛效果UIImage not UIImageView我在iOS上遇到过 目前还没有找到完美的解决方案 我有一个想法 这可以通过屏蔽来完成 但我对这很陌生CoreGraphics 如果有人可以帮忙的话
  • 使用 django:代理设置

    我有一个使用 apache 的本地开发 django 设置 问题是 在部署服务器上没有代理 而在我的工作场所 我在 http 代理后面工作 因此请求调用失败 有没有什么方法可以使请求库中的所有调用都通过代理进行 我知道如何使用代理参数向各个
  • Spring事务通过连接多个数据库

    我正在尝试开发一个小程序 在该程序中我可以使用 Spring 连接到多个数据库 并尝试通过在 weblogic 服务器上部署我的 Web 应用程序来使用 Spring 事务 问题是事务管理无法正常工作 我试图在两个数据库中插入记录 第一个数