package org.jeecg.config.sap; import com.sap.conn.jco.JCoDestination; import com.sap.conn.jco.JCoDestinationManager; import com.sap.conn.jco.JCoException; import com.sap.conn.jco.ext.DestinationDataProvider; import com.sap.conn.jco.ext.Environment; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.Properties; @Component @Slf4j @Getter 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; @Value("${sap.rfc.poolSize}") private String poolSize; @Value("${sap.rfc.expirationTime}") private String expirationTime; @Value("${sap.rfc.peekLimit}") 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, expirationTime); // 创建动态目的地(避免依赖 SM59 配置) CustomDestinationDataProvider provider = new CustomDestinationDataProvider(destinationName, connectProperties); // 设置全局目的地提供者 Environment.registerDestinationDataProvider(provider); // 获取目的地 this.destination = JCoDestinationManager.getDestination(destinationName); } }