用spring boot 构建项目,使用web3sdk操作区块链。打成jar 包运行时,提示找不到ca.crt和client.keystore等资源文件
0xbuidler opened this issue · 8 comments
1,我定义了一个初始化web3sdk的静态方法,在spring boot 启动后执行
`public class FiscoBcosSdk {
private static Logger logger = LoggerFactory.getLogger(FiscoBcosSdk.class);
private static ApplicationContext context=null;
public static Web3j web3;
public static Credentials credentials;
public static void initObj() throws Exception {
logger.info("(◉ω◉)===>Starting...");
//初始化Service
context = new ClassPathXmlApplicationContext("classpath:fisco-bcos/applicationContext.xml");
Service service = context.getBean(Service.class);
service.run();
logger.info("(◉ω◉)===>初始化AOMP的ChannelEthereumService");
ChannelEthereumService channelEthereumService = new ChannelEthereumService();
channelEthereumService.setChannelService(service);
//使用AMOP消息信道初始化web3j
web3 = Web3j.build(channelEthereumService);
EthBlockNumber ethBlockNumber = web3.ethBlockNumber().sendAsync().get();
logger.info("(◉ω◉)===>获取ethBlockNumber:{}",ethBlockNumber.getBlockNumber());
//初始化交易签名私钥
ECKeyPair keyPair = Keys.createEcKeyPair();
credentials = Credentials.create(keyPair);
logger.info("(◉ω◉)===>blockchain sdk init success!");
}}
`
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
try {
FiscoBcosSdk.initObj();
} catch (Exception e) {
logger.error("(T_T)===>FiscoBcosSdk.initObj() throws exception!");
e.printStackTrace();
}
}
`
这个问题有可能是打成jar包后,他的资源地址前面带了个“jar:file...”。这样就找不到,我有搜相关Spring boot 读取resource资源相关的问题,但是大部分的解决方案是自己使用流来读取资源文件。不过web3sdk的接口是需要传递文件路径。这就很尴尬了。。。
另外我有试过获取ca.crt的文件绝对地址,然后传递过去依然是不行的 :-(
建议先看下https://fisco-bcos-documentation.readthedocs.io/zh_CN/v1.0.1/docs/web3sdk/config_web3sdk.html 这个使用文档,检查你的ca.crt是否放在resource目录下。
看起来是在resource/fisco-bcos目录下,调整一下。
我这有个spring boot的demo。可以参考下https://github.com/yanyanho/web3jsdk-spring-boot-starter。可以看看。
我参考了此文档 https://www.jianshu.com/p/a2cf2336a48c
我将resources中所有资源拷贝了一份到jar包同级的目录下。使用
java -Dloader.path=./resources -jar demo-0.0.1-SNAPSHOT.jar
这个命令解决了此问题!