我在npe分公司的github有一个春季数据机场项目.
aerospike.host=localhost
aerospike.port=3000
aerospike.namespace=test
aerospike.timeout=125
os.name=Linux
line.separator=\n
mport com.aerospike.demo.simplespringbootaerospikedemo.repositories.AerospikeUserRepository;
import com.aerospike.client.Host;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.aerospike.config.AbstractAerospikeDataConfiguration;
import org.springframework.data.aerospike.repository.config.EnableAerospikeRepositories;
import java.util.Collection;
import java.util.Collections;
@Configuration
@EnableConfigurationProperties(AerospikeConfigurationProperties.class)
@EnableAerospikeRepositories(basePackageClasses = AerospikeUserRepository.class)
public class AerospikeConfiguration extends AbstractAerospikeDataConfiguration {
@Autowired
private AerospikeConfigurationProperties aerospikeConfigurationProperties;
@Override
protected Collection<Host> getHosts() {
return Collections.singleton(new Host(aerospikeConfigurationProperties.getHost(), aerospikeConfigurationProperties.getPort()));
}
@Override
protected String nameSpace() {
return aerospikeConfigurationProperties.getNamespace();
}
}
主要的应用程序是-
import com.aerospike.demo.simplespringbootaerospikedemo.configuration.AerospikeConfiguration;
import com.aerospike.demo.simplespringbootaerospikedemo.objects.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.aerospike.core.AerospikeTemplate;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.stream.Stream;
import org.joda.time.DateTime;
public class TestSpringConfig {
public static void main(String[] args) throws IOException {
System.out.println(ClassLoader.getSystemResourceAsStream("application.properties").available());
Properties props = new Properties();
InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("application.properties");
if (resourceAsStream != null) {
props.load(resourceAsStream);
}
if(props != null) {
System.setProperties(props);
}
try {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AerospikeConfiguration.class);
AerospikeTemplate template = ctx.getBean(AerospikeTemplate.class);
template.save(new User(123, "","", 12, DateTime.now().plusSeconds(60).getMillis()));
} catch (Exception e) {
StackTraceElement[] st = e.getStackTrace();
Stream.of(st).forEach(System.out::println);
} catch (ExceptionInInitializerError e) {
System.out.println(e.getCause());
e.getCause().printStackTrace();
}
}
}
当我运行主应用程序时,我会出现以下错误-
java.base/sun.nio.fs.UnixPath.normalizeAndCheck(UnixPath.java:75),java.base/sun.nio.fs.UnixPath.(UnixPath.java:69),java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:279),java.base/java.io.FilePermission.(FilePermission.java:207),java.base/sun.security.provider.PolicyFile.getKnownPermission(PolicyFile.java:886),java.base/sun.security.provider.PolicyFile.getInstance(PolicyFile.java:836)在java.base/sun.security.provider.PolicyFile.addGrantEntry(PolicyFile.java:735) at java.base/sun.security.provider.PolicyFile.initDefaultPolicy(PolicyFile.java:491) at java.base/sun.security.provider.PolicyFile$2.run(PolicyFile.java:338) at java.base/sun.security.provider.PolicyFile$2.run(PolicyFile.java:335) at java.base/java.security.AccessController.doPrivileged(Native方法)java.base/sun.security.Provider.PolicyFile。java.base/sun.security.provider.PolicyFile.init(PolicyFile.java:328),java.base/sun.security.provider.PolicyFile.(PolicyFile.java:281),java.base/java.security.Policy.loadPolicyProvider(Policy.java:207),java.base/java.security.Policy.getPolicyNoCheck(Policy.java:178),java.base/java.security.ProtectionDomain.implies(ProtectionDomain.java:321),java.base/java.security.ProtectionDomain.impliesWithAltFilePerm(ProtectionDomain( java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:450) at java.base/java.security.AccessController.checkPermission(AccessController.java:897) at ch.qos.logback.core.util.Loader$1.run(Loader.java:48) at ch.qos.logback.core.util.Loader$1.run(Loader.java:45) at java.base/java.security.AccessController.doPrivileged(Native Method))在ch.qos.logback.classic.util.ContextInitializer.findURLOfDefaultConfigurationFile(ContextInitializer.java:109) at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:138) at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:55) at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417)在org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362) at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130) at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:59) at org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:178) at org.springframework.context.support.GenericApplicationContext.( org.springframework.context.annotation.AnnotationConfigApplicationContext.(AnnotationConfigApplicationContext.java:67) at org.springframework.context.annotation.AnnotationConfigApplicationContext.(AnnotationConfigApplicationContext.java:91) at com.aerospike.demo.simplespringbootaerospikedemo.TestSpringConfig.main(TestSpringConfig.java:27) )
知道怎么纠正这个错误吗?
发布于 2022-03-10 14:31:33
您为了“自动”AerospikeTemplate
bean而尝试实现的解决方案不起作用,并导致NPE的出现。在静态main()方法中,有几种方法可以“自动更新”一个bean (在本例中是AerospikeTemplate
bean),下面是一个关于这个场景的StackOverFlow问题:如何使用来自main(String[] args)方法的自动处理(@ autowired )引用?
但主要的问题是你想要实现什么?传统的使用Spring Data Aerospike
存储库/模板的方法是在服务(也是bean)中自动调用存储库/模板,然后从控制器/测试/不同服务等方面调用服务方法。大多数Spring应用程序不包括静态main()方法中的逻辑--这是可以完成的,但没有多大意义。
发布于 2022-03-16 01:08:15
要自动引导AerospikeTemplate
,需要在main
方法中设置Spring应用程序(请查看示例这里):
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
然后你可以在任何你需要的地方自动驾驶AerospikeTemplate
。
如果您正在使用Spring开发控制台应用程序,我建议使用org.springframework.boot.CommandLineRunner。例如:
@Component
public class CommandLineRunnerImpl implements CommandLineRunner {
@Autowired
AerospikeTemplate template;
@Override
public void run(String... args) throws Exception {
template.save(new User(123, "","", 12, DateTime.now().plusSeconds(60).getMillis()));
}
}
https://stackoverflow.com/questions/71404987
复制相似问题