我想触发一个cronjob,它将删除一些索引并在初始化时将其重新创建为一次活动,即cronjob应该只运行一次。
如何实现?
答案 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 添加索引,则无需扩展此类。