如何在初始化期间触发cronjob

时间:2019-07-03 04:30:13

标签: hybris

我想触发一个cronjob,它将删除一些索引并在初始化时将其重新创建为一次活动,即cronjob应该只运行一次。

如何实现?

1 个答案:

答案 0 :(得分:0)

首先,您可以使用 items.xml 创建索引,如下所示。此OOTB将来在初始化或更新时自动创建索引。

<itemtype code="myType" autocreate="true" generate="true">
    <attributes>
        ...
    </attributes>
    <indexes>
        <index name="myIndex" unique="true">
            <key attribute="myField1" />
            <key attribute="myField2" />
        </index>
    </indexes>
</itemtype>

您可以解决此情况,但是您将失去数据库独立性。您可以使用spring bean和jdbc直接连接到db,并使用DDL命令删除索引。您可以在下面的groovy脚本中进行检查。

import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

def config = spring.getBean("configurationService").getConfiguration();

DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(config.getString("db.driver"));
dataSource.setUrl(config.getString("db.url"));
dataSource.setUsername(config.getString("db.username"));
dataSource.setPassword(config.getString("db.password"));
JdbcTemplate jdbc = new JdbcTemplate(dataSource)
jdbc.execute("ALTER TABLE MYTABLE ALTER (P_MYFIELD BIGINT)");

要在初始化步骤创建索引,您需要扩展 AbstractSystemSetup 类。如果可以使用 items.xml 添加索引,则无需扩展此类。