Java 如何在EJB模块启动时执行一些代码
我有多个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
我想如果我创建一个@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连接没有任何约束,唯一的约束是持久化单元名称