使用Spring Boot和Mapr-db创建多个连接

时间:2019-01-12 03:10:30

标签: java spring-boot mapr

我需要与MapR-DB创建多个连接。我已经创建了Configuration对象,并将该对象传递给存储库类。我想了解一下使用弹簧作用域“原型”是否是实现此目的的优雅方法。

这里是RawMaprWriterThread类,该类创建连接对象并将其作为保存方法的参数传递。这是由多个线程多次实例化的

@Component
@Scope("prototype")
public class RawMaprWriterThread implements Runnable {
    final Logger logger = LoggerFactory.getLogger(RawMaprWriterThread.class);

    private List<RawSyslogMessageVO> messageList;

    @Autowired
    private RawSyslogMaprRepository rawSyslogRepository;

    public List<RawSyslogMessageVO> getMessageList() {
        return messageList;
    }

    @Override
    public void run() {
        logger.info("<----------Creating config object for MapR DB Writer------------>");
        Configuration conf = HBaseConfiguration.create();
        conf.set("mapr.hbase.default.db", "maprdb");
        logger.info("<----------Executing save with messageList of size ------------> " + messageList.size());
        rawSyslogRepository.save(messageList, conf);
    }

    public void setMessageList(List<RawSyslogMessageVO> messageList) {
        logger.info("<-----------------RawMaprWriterThread setMessageList executed ----------->");
        this.messageList = messageList;
    }

}

下面是使用配置对象并将数据写入MapR-DB的存储库类

@Component
public class RawSyslogMaprRepository {

    final Logger logger = LoggerFactory.getLogger(RawSyslogMaprRepository.class);

    public static final byte[] COLUMFAMILY_KEY_BYTES = "key".getBytes();
    public static final byte[] COLUMFAMILY_RAWSYSLOG_BYTES = "rawinfo".getBytes();

    static byte[] qKey = Bytes.toBytes("key");
    static byte[] qApplianceID = Bytes.toBytes("applianceID");
    static byte[] qPartyID = Bytes.toBytes("partyID");
    static byte[] qPartyName = Bytes.toBytes("partyName");
    static byte[] qInventryName = Bytes.toBytes("inventryName");
    static byte[] qSentTime = Bytes.toBytes("sentTime");
    static byte[] qMessage = Bytes.toBytes("message");
    static byte[] qTrackID = Bytes.toBytes("trackID");

    public void save(List<RawSyslogMessageVO> syslogList, Configuration conf) {
        String mapRPath = "/app/SmartAnalytics/Apps/DaaS/Network/syslograw";
        TableName tableName = TableName.valueOf(mapRPath);
        try {
            Connection mapRConnection = ConnectionFactory.createConnection(conf);
            BufferedMutator mutator = mapRConnection.getBufferedMutator(tableName);
            List<Put> puts = new ArrayList<Put>();
            logger.info("Creating list of puts ");
            for (RawSyslogMessageVO syslog : syslogList) {
                Date startTime = Calendar.getInstance()
                    .getTime();
                Put p = new Put(Bytes.toBytes(syslog.getKey()));
                p.addColumn(COLUMFAMILY_RAWSYSLOG_BYTES, qKey, Bytes.toBytes(syslog.getKey()));
                p.addColumn(COLUMFAMILY_RAWSYSLOG_BYTES, qApplianceID, Bytes.toBytes(syslog.getApplianceID()));
                p.addColumn(COLUMFAMILY_RAWSYSLOG_BYTES, qPartyID, Bytes.toBytes(syslog.getPartyID()));
                p.addColumn(COLUMFAMILY_RAWSYSLOG_BYTES, qPartyName, Bytes.toBytes(syslog.getPartyName()));
                p.addColumn(COLUMFAMILY_RAWSYSLOG_BYTES, qInventryName, Bytes.toBytes(syslog.getInventryName()));
                p.addColumn(COLUMFAMILY_RAWSYSLOG_BYTES, qSentTime, Bytes.toBytes(syslog.getSentTime()));
                p.addColumn(COLUMFAMILY_RAWSYSLOG_BYTES, qTrackID, Bytes.toBytes(syslog.getTrackID()));
                p.addColumn(COLUMFAMILY_RAWSYSLOG_BYTES, qMessage, Bytes.toBytes(syslog.getMessage()));
                logger.debug("---p-" + p);
                Date endTime = Calendar.getInstance()
                    .getTime();
                long durationInMilliSec = endTime.getTime() - startTime.getTime();
                logger.debug("Time Taken for RawSyslog for each Message in Mapr :: " + durationInMilliSec);
                puts.add(p);

            }

            logger.info("size of puts to the list " + puts.size());
            logger.info("Mutator is mutating");
            mutator.mutate(puts);
            mutator.flush();
            mutator.close();
            mapRConnection.close();

        } catch (IOException e) {
            logger.error("erorr while getting MapR connection", e);
        }

    }
}

我做对了吗?

0 个答案:

没有答案