我尝试了2.2.6(docker图像)的cassandra版本和3.7(最新版本,而不是docker)。当我为表创建触发器时,它们都会报告相同的问题。
Exception when creating cassandra trigger
```
package com.ttData.triggers;
import ...
public class DataTrigger implements ITrigger {
private Properties properties = loadProperties();
@Autowired
private KafkaTemplate<Integer, String> kafkaTemplate;
private static AtomicInteger index = new AtomicInteger(1);
@Override
public Collection<Mutation> augment(Partition update) {
...
return Collections.singletonList(audit.build());
}
private static Properties loadProperties()
{
...
return properties;
}
} ```
答案 0 :(得分:0)
您应该使用单引号而不是className
的双引号
cqlsh:test> CREATE TRIGGER myTrigger on mytable using "className";
SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] message="line 1:42 mismatched input 'className' expecting STRING_LITERAL (...TRIGGER myTrigger on mytable using ["classNam]e";)">
cqlsh:test>
cqlsh:test> CREATE TRIGGER myTrigger on mytable using 'className';
ConfigurationException: <ErrorMessage code=2300 [Query invalid because of configuration issue] message="Trigger class 'className' doesn't exist">
答案 1 :(得分:0)
调试cassandra源代码后,我认为这是一个错误。
即使触发器目录和触发器类都正确,它仍然可以报告触发器类不存在的错误。
原因是创建触发器的工作线程不是一个安全线程,应由cassandra的SecurityManager管理并属于SecurityThreadGroup。因此,在验证安全性失败时会抛出异常。