Java 如何在EJB模块启动时执行一些代码

Java 如何在EJB模块启动时执行一些代码,java,ejb,ear,Java,Ejb,Ear,我有多个EJB模块,每个模块都需要数据库中的一些默认数据,创建一些目录或文件 我想如果我创建一个@Startup@singletonejb,我会完成这项工作,但这是正确的方法吗?ejb将保留在内存中,即使我只在启动时使用它是的,使用启动单例bean通常是进行初始化的正确方法,因为@startup不适用于@Stateless 如果要将数据插入数据库,另一个选项是通过persistence.xml运行SQL脚本: <property name="javax.persistence.sql-lo

我有多个EJB模块,每个模块都需要数据库中的一些默认数据,创建一些目录或文件


我想如果我创建一个@Startup@singletonejb,我会完成这项工作,但这是正确的方法吗?ejb将保留在内存中,即使我只在启动时使用它

是的,使用启动单例bean通常是进行初始化的正确方法,因为@startup不适用于@Stateless

如果要将数据插入数据库,另一个选项是通过persistence.xml运行SQL脚本:

<property name="javax.persistence.sql-load-script-source"
      value="META-INF/sql/data.sql" />

这显然有一个缺点,即不能用Java代码管理数据库插入。有关更多信息,请参见此处:


如果您想了解更多关于EJB(和单例)的信息,请参见此处:

我是这样做的。我在meta inf中有sql文件和其他脚本、json或属性文件,但persistence.xml在另一个存档中。我有一个标准的持久化单元名称,因此我可以插入一个实体管理器并执行本机查询,逐行读取文件:这样,sql查询将随模块一起移动,我对jdbc连接没有任何约束,唯一的约束是持久化单元名称