NutzCN Logo
问答 关于dao进行按月分表的实现方式讨论
发布于 2197天前 作者 文涛(wentao) 1616 次浏览 复制 上一个帖子 下一个帖子
标签:

实现代码:

public void insertLog(InterfaceLogs interfaceLogs) {
    TableName.run(Times.format("yyyyMM", Times.now()), new Runnable() {
        @Override
        public void run() {
            dao.create(InterfaceLogs.class, false);
            dao.insert(interfaceLogs);
        }
    });
}

以上方式实现了按月分表,但是在每次插入操作的时候都调用了create方法,虽然看接口情况,貌似延迟很低,但不知道有没有更好的方式处理

1 回复

直接上代码

protected Map<String, Dao> ydDaos = new HashMap<String, Dao>();
public Dao dao() {
		Calendar cal = Calendar.getInstance();
		String key = Times.format("yyyyMMdd", cal.getTime());
		return dao(key);
	}

	public Dao dao(String key) {
		Dao dao = ydDaos.get(key);
		if (dao == null) {
			synchronized (this) {
				dao = ydDaos.get(key);
				if (dao == null) {
					dao = Daos.ext(this.dao, key);
					dao.create(InterfaceLogs.class, false);
					ydDaos.put(key, dao);
					try {
						Daos.migration(dao, InterfaceLogs.class, true, false);
					} catch (Throwable e) {
					}
				}
			}
		}
		return dao;
	}
添加回复
请先登陆
回到顶部