package org.jeecg.config.sap; import com.sap.conn.jco.*; import com.sap.conn.jco.ext.DestinationDataProvider; import com.sap.conn.jco.ext.Environment; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.io.File; import java.io.FileOutputStream; import java.util.Properties; @Component @Slf4j public class SapRfcConnectionManager { @Value("${sap.rfc.destination}") private String destinationName; @Value("${sap.rfc.ashost}") private String ashost; @Value("${sap.rfc.sysnr}") private String sysnr; @Value("${sap.rfc.client}") private String client; @Value("${sap.rfc.user}") private String user; @Value("${sap.rfc.passwd}") private String passwd; @Value("${sap.rfc.lang}") private String lang; private String poolSize = "5"; private String idleTimeout = "10000"; private String peekLimit = "10"; private JCoDestination destination; /** * * @throws JCoException */ @PostConstruct public void init() throws Exception { Properties connectProperties = new Properties(); connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, ashost); connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, sysnr); connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, client); connectProperties.setProperty(DestinationDataProvider.JCO_USER, user); connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, passwd); connectProperties.setProperty(DestinationDataProvider.JCO_LANG, lang); connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, peekLimit); connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, poolSize); connectProperties.setProperty(DestinationDataProvider.JCO_EXPIRATION_TIME, idleTimeout); // 创建动态目的地(避免依赖 SM59 配置) CustomDestinationDataProvider provider = new CustomDestinationDataProvider(); provider.addDestination(destinationName, connectProperties); // 设置全局目的地提供者 // Environment.registerDestinationDataProvider(provider); log.info("properties = " + connectProperties); //生成配置文件,JCoDestinationManager.getDestination()调用时会需要该连接配置文件,后缀名需要为jcoDestination FileOutputStream fos = null; String suffix = "jcoDestination"; File cfg = new File(destinationName + "." + suffix); if (!cfg.exists()) { try { fos = new FileOutputStream(cfg, false); connectProperties.store(fos, "for tests only !"); fos.close(); } catch (Exception var9) { throw new Exception("Unable to create the destination file " + cfg.getName(), var9); } finally { if (null != fos) { fos.close(); } } } // 获取目的地 this.destination = JCoDestinationManager.getDestination(destinationName); } /** * * @return */ public JCoDestination getDestination() { return destination; } /** * */ public void destroy() { if (destination != null) { // destination; } } }