RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-253152

Владислав's questions

Martin Hope
Владислав
Asked: 2022-07-06 20:32:20 +0000 UTC

在 Postgres 中存储大文本

  • 0

需要在 html 中将报告作为文本存储在数据库中(没有其他方法了),它由 400,000 个字符(或 5mb)组成。使用的数据库是 Postgres。所以这里是最好的方法。如果将其存储为文本或字节数组,那么随着表中的行数,加载变得耗时,这是合乎逻辑的。但是,例如,如果存储为 CLOB 或 BLOB,那么这是一种指向 pg_largeobject 表的链接,其中该对象被分成 2048 个字节的部分。似乎一切正常,表格在几毫秒内加载,一切似乎都很酷。但是问题是pg_largeobject表被堵塞了,如果从主表中删除条目,那么条目并没有从pg_largeobject中删除,这里我不明白如何最好地清除它(可能是触发器),如何它可以填充很多,因为我在那里理解它 loid 序列不会重置为零,必须在某个时候结束。

知识渊博且面临这样问题的人,请提供建议。如何最好地处理存储。万事俱备,只有一个数据库。因此,当然,它将作为文件存储在磁盘上,而在数据库中,它纯粹是指向它的链接,但不是。

postgresql
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-05-31 22:20:26 +0000 UTC

如何从 Spring 数据中的 jsonb 列中读取对象数组?

  • 2

我在数据库中有一个类型字段jsonb,由一组对象组成。

Jpa对这种数据不太适用,例如,如果我需要json根据某种标准找到 this 中的所有对象,那么就像我将无法JpaRepository返回List这些对象一样,我将首先需要返回List<Object>。然后通过mapper转换为我需要的模型。很显然,这不是一个很复杂的操作。但我决定走得更远,试试这个:也许你可以从某个类继承Spring Jpa以实现完全相同的行为,但在你自己的实现中,即立即@Query像往常一样编写并返回 example List<Интересующая модель>。也就是说,转换发生在我的实现中。该方法可以用一个新的注解来标记,例如@JsonToList,参数就是所需的模型类型。

我对更有经验的 Javasts 有一个问题,这甚至可能吗?吹牛值得吗?也许你会说这只是无利可图,你不需要费心,做一个助手类并通过它翻译更容易。

java
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-10-05 03:01:25 +0000 UTC

使用 logrotate 旋转日志

  • 1

帮我弄清楚tomcat日志的轮换。我在服务器上配置了 logrotation.conf,添加到它

/usr/local/tomcat9/logs {
   daily
   rotate 7
   size 10M
   compress
   missingok
   delaycompress
   dateext
}

然后我运行命令logrotate -d /etc/logrotate.conf,但没有任何反应。如果您一次获取一个文件,那么由于某种原因它不会归档它们,而只是重命名它们

renaming /usr/local/tomcat9/logs/catalina.out to /usr/local/tomcat9/logs/catalina.out-20191004
creating new /usr/local/tomcat9/logs/catalina.out mode = 0777 uid = 1001 gid = 1001

请帮助我了解如何正确执行此操作,以便他查看整个日志文件夹。

linux
  • 2 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-03-18 17:36:05 +0000 UTC

从远程计算机获取文件

  • 0

请告诉我,建议。

机器上安装了一个应用程序,机器是共享的,即在同一网络的另一台机器上,可以通过ip-address运行应用程序。

我在主页上有一个表单,我需要在其中提交一个 excel 文件。但问题是,当我在java端处理文件时,自然会要求文件在启动应用程序的目录中,即绝对路径,它只是有一台安装了Tomcat的工作机器,以及从哪里启动。如果文件放在 tomcat/bin 目录下,那么一切正常,值得下载该文件,例如,从桌面,然后发誓找不到该文件,更何况从远程机器,它无法下载。

请就如何实现这一点提供建议,我尝试通过 JS 将路径替换为 c:\fakepath\filename,但它不起作用,尤其是在 macOS 上。

我使用 AJAX 加载文件本身,然后到控制器我只是接受它作为文件类型。我已经将它传递给我解析它的方法。

js文件

function calcGroupRate() {
var file = checkEmpty($('input[name="ratesGroupFile"]')
  .val().split("\\").pop());
  $.ajax({
    url: "rate/group",
    datatype: "json",
    type: "post",
    contentType: "application/json",
    data: JSON.stringify({ file: file })
  });
 }

java控制器

@PostMapping(value = "/group")
public ResponseEntity<Object> totalGroupModel(@RequestBody CalcGroupRateBody object) {
    logger.info(object.getFile().getPath());
    logger.info(object.getFile().getAbsolutePath());
    logger.info(object.getFile().getName());
    groupCalculateRate.fetchGroupModels(object.getFile());
    return new ResponseEntity<>(groupCalculateRate.getListError(), HttpStatus.OK);
}

接下来,我将文件传输到另一个我解析 Excel 的类

public List<GroupListBasicDate> getGroupListBasicDateFromFile(File file) {
    try {
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(file);
java
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-02-25 13:52:37 +0000 UTC

使用 java.util.concurrent.* 的成本效益 [关闭]

  • 0
关闭。这个问题不可能给出客观的答案。目前不接受回复。

想改进这个问题? 重新构建问题,以便可以根据事实和引用来回答。

3年前关闭。

改进问题

大家好,两年的Java开发经验,让我学到了很多东西,当然我没用过什么东西,除了在学习阶段,这个是java.util.concurrent.*包,对我来说还是一头雾水森林,工作原理可以理解,但是我还是不懂应用,nobody,queues,blocking等等。

现在已经明白了,这个问题本身不是一个问题,而在很大程度上是一个咨询。

我有一个使用 JBDC + Postgres 的项目。数据库访问是标准的。我收到连接 - 我填写参数 - 我完成请求 - 我处理 ResultSet - 我关闭连接。我总是只有一个手术,这已经足够了。但随后需要一次执行大约 100 个相同类型的请求。在此之前,我是用标准的方式来做的,把所有东西都放在一个List中,然后打开连接,按顺序执行请求,然后我已经在List中编写了响应模型并关闭了连接。

然后我有一个问题,这个时候是否值得,例如使用多线程,例如队列,或者例如将进程分成10个操作的10个线程,它是否工作得更快,并且会总体来说划算吗?值得努力学习和应用吗?在学习中,很明显它会派上用场,因为有很多职位需要多线程知识。

java
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-02-19 16:27:39 +0000 UTC

如何通过映射更改 React 中的组件类

  • 0

我学习 React,阅读文档,教程。我决定尝试将 JSP 翻译成 React 的一个单独的前端。我从一个小组件开始,这就是自动搜索,原理是,我们输入一个单词,它会给出选项。

几乎一切都解决了,但我不知道如何通过上下键滚动列表,我不知道如何传递上面的属性并告诉一个或另一个 li 将类更改为选中。

我尝试使用 map(item, key),但是如何将属性传递给这个项目,例如?

这是我的代码,我也想请你看看我是否把它清理干净了,或者如果有评论立即解析它们,我将不胜感激:)

import React, { Component } from "react";
import "./App.css";

class ProductRow extends React.Component {
  constructor(props) {
    super(props);
    this.handlerrOnMouseOver = this.handlerrOnMouseOver.bind(this);
    this.handlerrOnMouseOut = this.handlerrOnMouseOut.bind(this);
    this.handlerrOnMouseDown = this.handlerrOnMouseDown.bind(this);
    this.state = {
      class: ""
    };
  }

  handlerrOnMouseOver() {
    this.setState({
      class: "selected"
    });
  }

  handlerrOnMouseOut() {
    this.setState({
      class: ""
    });
  }

  handlerrOnMouseDown() {
    this.props.callback(this.props.product.station);
  }

  render() {
    const product = this.props.product;
    return (
      <li
        className={this.state.class}
        onMouseOver={this.handlerrOnMouseOver}
        onMouseOut={this.handlerrOnMouseOut}
      >
        <a href="javascript:void(0);" onMouseDown={this.handlerrOnMouseDown}>
          {product.station}
        </a>
      </li>
    );
  }
}

class ProductTable extends React.Component {
  render() {
    const filterText = this.props.filterText;
    const rows = [];
    if (filterText !== "") {
      this.props.products.map((product, key) => {
        if (
          product.station.toLowerCase().indexOf(filterText.toLowerCase()) ===
            -1 ||
          rows.length === 20
        ) {
          return;
        } else {
          rows.push(
            <ProductRow
              product={product}
              key={key}
              callback={this.props.callback}
            />
          );
        }
      });
    }

    var style = {
      width: "100%",
      fontSize: 14
    };

    if (rows.length > 0) {
      return (
        <div className="sf_suggestion">
          <ul tabIndex="-1" style={style}>
            {rows}
          </ul>
        </div>
      );
    } else {
      return <div />;
    }
  }
}

class SearchBar extends React.Component {
  constructor(props) {
    super(props);
    this.handlerFilterTextChange = this.handlerFilterTextChange.bind(this);
    this.handlerOnKeyUp = this.handlerOnKeyUp.bind(this);
    this.handlerOnBlur = this.handlerOnBlur.bind(this);
    this.changeValue = this.changeValue.bind(this);
    this.handlerOnFocus = this.handlerOnFocus.bind(this);
    this.state = {
      visible: true,
      filterText: "",
      key: ""
    };
  }

  handlerFilterTextChange(e) {
    e.preventDefault();
    this.setState({ filterText: e.target.value });
  }

  handlerOnKeyUp() {
    var key = window.event.keyCode;
    if (key === 38 || key === 40 || key === 13) {
      this.setState({ key: key });
    }
    if (key === 27) {
      this.setState({ visible: false });
    }
  }

  changeValue(e) {
    this.setState({ filterText: e });
    this.handlerOnBlur();
  }

  handlerOnBlur() {
    this.setState({ visible: false });
    this.setState({ key: "" });
  }

  handlerOnFocus() {
    if (!this.state.visible) {
      this.setState({ visible: true });
    }
  }

  render() {
    return (
      <p className="inp">
        <label>
          <input
            type="text"
            placeholder="&nbsp;"
            value={this.state.filterText}
            onChange={this.handlerFilterTextChange}
            onFocus={this.handlerOnFocus}
            onKeyUp={this.handlerOnKeyUp}
            onBlur={this.handlerOnBlur}
          />
          <span className="label">{this.props.name}</span>
          <span className="border" />
          {this.state.visible && (
            <ProductTable
              products={this.props.products}
              filterText={this.state.filterText}
              keyUp={this.state.key}
              callback={this.changeValue}
            />
          )}
        </label>
      </p>
    );
  }
}

class App extends Component {
  render() {
    return (
      <table>
        <tbody>
          <td>
            <SearchBar products={this.props.products} name={"Имя"} />
          </td>
        </tbody>
      </table>
    );
  }
}

export default App;
reactjs
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-02-14 19:28:34 +0000 UTC

Spring Test 没有使用 JavaConfig 的类型限定 bean

  • 0

最近开始在 Spring 中使用 JavaConfig。现在我决定在不使用 xml 的情况下尽情享受测试。

打开坞站,一切都做对了,收益差别不大。规定了必要的注释和参数

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppInit.class, loader = AnnotationConfigContextLoader.class)

接下来,我自动装配了所需的 Bean

@Autowired
private MyBean myBean;

我运行测试并得到 No qualifying bean of type 错误。

MyBean 被标记为@Component 并且没有在糖果中描述。

我已经在测试类中注册了一个静态类,并在其中描述了Bean 就是这样

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppInit.class, loader = AnnotationConfigContextLoader.class)
public class MyBeanTest {

@Configuration
static class ContextConfiguration {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

@Autowired
private MyBean myBean;

它没有帮助,并且设置了 @Qualifier 注释,Bean 自己已经使用 AppInit.class 中定义的名称注册,没有任何帮助。

如果我错过了什么,你能告诉我吗?

java
  • 2 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-02-09 02:18:34 +0000 UTC

带有复选框的 jQuery 下拉列表

  • 0

帮助实现想法,第二天我战斗。有必要从复选框实现下拉列表,并且在选中时,应在输入中显示该值,并在删除时将其删除。

我是这样实现的,它似乎可以工作,但是如果你输入几个输入,那么结果,一个楔形,每个人的列表都会退出,如果你放弃它,然后假装检查值的数量​​所有输入

<div class="col-3" id="col1">
                  <div class="headVolumeGroup" id="headVolumeGroup1">
                    <input class="effect-1" data-parameter="1"  data-id="volumeGroupsStringReturnException1"
                           type="text" autocomplete="off"
                           id="volumeGroupsStringReturnException1"  />
                    <span class="focus-border"></span>
                    <p class="multiSel" id="multiSel1" hidden></p>
                  </div>
                  <div class="listVolumeGroup" id="listVolumeGroup1">
                    <div class="mutliSelect" id="mutliSelect1">
                      <ul>
                        <li>
                          <input type="checkbox" value="120" />120</li>
                        <li>
                          <input type="checkbox" value="138" />138</li>
                        <li>
                          <input type="checkbox" value="150" />150</li>
                      </ul>
                    </div>
                  </div>
                </div>

                <div class="col-3" id="col2">
                  <div class="headVolumeGroup" id="headVolumeGroup2">
                    <input class="effect-1" data-parameter="2" data-id="volumeGroupsStringReturnException2"
                           type="text" autocomplete="off"
                           id="volumeGroupsStringReturnException2"  />
                    <span class="focus-border"></span>
                    <p class="multiSel" id="multiSel2" hidden></p>
                  </div>
                  <div class="listVolumeGroup" id="listVolumeGroup2">
                    <div class="mutliSelect" id="mutliSelect2">
                      <ul>
                        <li>
                          <input type="checkbox" value="120" />120</li>
                        <li>
                          <input type="checkbox" value="138" />138</li>
                        <li>
                          <input type="checkbox" value="150" />150</li>
                      </ul>
                    </div>
                  </div>
                </div>

和 JS 本身

$(document).ready(function(){

$(".col-3 .headVolumeGroup input").on('click', function() {
  $(".col-3 .listVolumeGroup ul").slideToggle('fast');
});

$(document).bind("click", function(e) {
  var $clicked = $(e.target);
  if (!$clicked.parents().hasClass("col-3"))
    $(".col-3 .listVolumeGroup ul").hide();
  });

 $('.mutliSelect input[type="checkbox"]').on("click", function() {
   var title = $(this)
      .closest(".mutliSelect")
      .find('input[type="checkbox"]')
    .val(),
  title = $(this).val() + ",";
if ($(this).is(":checked")) {
  var html = '<span title="' + title + '">' + title + "</span>";

  $(".multiSel").append(html);
  var val = $(".multiSel").text();
   $(".col-3 .headVolumeGroup input").val(val);
} else {
  $('span[title="' + title + '"]').remove();
  var val = $(".multiSel").text();
  $(".col-3 .headVolumeGroup input").val(val);
}
});
}); 

我试图找出必要的 id 和具有属性的某个 num,然后将它们蒙蔽,以便最终每个人都有自己的输入。但最终,变量未能抛出值。

像这样

$(document).ready(function(){
var element;
var id;

 $(".col-3 .headVolumeGroup input").on('click', function() {
    id = this.getAttribute("data-parameter"); 
    element = this.getAttribute("data-id"); 
  $("#col" + id + " #listVolumeGroup" + id + " ul").slideToggle("fast");
 });
 $(document).bind("click", function(e) {
  var $clicked = $(e.target);
  if (!$clicked.parents().hasClass("col-3"))
  $("#col" + id + " #listVolumeGroup" + id + " ul").hide();
 });

 $('#mutliSelect' + id + ' input[type="checkbox"]').on("click",    function() {
var title = $(this)
    .closest("#mutliSelect" + id)
    .find('input[type="checkbox"]')
    .val(),
  title = $(this).val() + ",";

if ($(this).is(":checked")) {
  var html = '<span title="' + title + '">' + title + "</span>";
  $("#multiSel" + id).append(html);
  var val = $("#multiSel" + id).text();
  $("#col" + id + " #headVolumeGroup" + id + " #" + element).val(val);
} else {
  $('span[title="' + title + '"]').remove();
  var val = $("#multiSel" + id).text();
  console.log(element);
  $("#col" + id + " #headVolumeGroup" + id + " #" + element).val(val);
}
});
});

当然,它没有正常工作。

请帮忙,我本人仍处于学习 jQuery 的初级阶段。我可以在 js 上做到这一点,但我想了解它在 jQuery 上的表现。

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-02-01 20:04:23 +0000 UTC

Spring Boot 无法启动 - 无法实例化:构造函数抛出异常;嵌套异常是 java.lang.NullPointerException

  • 0

我正在尝试建立一个 Spring Boot 项目,更准确地说,我正在将我的 MVC 项目转移到 Spring Boot,以免部署到 Tomcat。我摆脱了 applicationContext.xml 并且第一次将所有内容与注释混合在一起传输到 JavaConfig,更准确地说,在 applicationContext.xml 中我只有一个与数据库的连接。

它是:

<bean id="zkSettingsHolder" class="com.uraltranscom.calculaterate.util.ZookeeperUtil.ZookeeperSettingHolder" />

<!-- дешифровка пароля -->
<bean id="decodedPassword" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass" value="com.uraltranscom.calculaterate.util.ZookeeperUtil.KeyMaster"/>
    <property name="targetMethod" value="dec"/>
    <property name="arguments">
        <list>
            <value>#{zkSettingsHolder.password}</value>
            <value>#{zkSettingsHolder.secretKey}</value>
        </list>
    </property>
</bean>

<!-- устанавливаем соединение -->
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" lazy-init="false"  destroy-method="close">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="#{zkSettingsHolder.dataBase}"/>
    <property name="username" value="#{zkSettingsHolder.user}"/>
    <property name="password" value="#{decodedPassword}"/>

</bean>

<bean class="com.uraltranscom.calculaterate.util.ConnectUtil.ConnectionDB">
    <property name="dataSource" ref="dataSource"/>
</bean>

它变成了:

@Configuration
@ComponentScan({"com.ex.calc"})
public class AppConfig {

@Bean
@Primary
public ZookeeperSettingHolder zookeeperSettingHolder() {
    return new ZookeeperSettingHolder();
}

@Bean
public CommonsMultipartResolver commonsMultipartResolver() {
    CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
    commonsMultipartResolver.setMaxUploadSize(10000000);
    return commonsMultipartResolver;
}

@Bean(name = "decodedPassword")
public MethodInvokingFactoryBean methodInvokingFactoryBean() throws Exception {
    MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean();
    methodInvokingFactoryBean.setTargetClass(KeyMaster.class);
    methodInvokingFactoryBean.setTargetMethod("dec");
    methodInvokingFactoryBean.setArguments(new String[] {zookeeperSettingHolder().getPassword(), zookeeperSettingHolder().getSecretKey()});
    methodInvokingFactoryBean.afterPropertiesSet();
    return methodInvokingFactoryBean;
}

@Bean(destroyMethod = "close")
public DataSource dataSource() throws Exception {
    DataSource dataSource = new DataSource();
    dataSource.setDriverClassName("org.postgresql.Driver");
    dataSource.setUrl(zookeeperSettingHolder().getDataBase());
    dataSource.setUsername(zookeeperSettingHolder().getUser());
    dataSource.setPassword((String) methodInvokingFactoryBean().getObject());
    return dataSource;
}

@Bean
public ConnectionDB connectionDB() throws Exception {
    ConnectionDB connectionDB = new ConnectionDB();
    connectionDB.setDataSource(dataSource());
    return connectionDB;
}
}

在项目中,我使用注释 @Component 和 @Autowired

我添加了所有依赖项,在 Spring.io 网站上创建了项目本身,我不记得具体了,在那里你选择了必要的依赖项,等等。

应用类

@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan({"com.ex.calc"})
public class CalcApplication {

public static void main(String[] args) {
    SpringApplication.run(CalcApplication .class, args);
}

}

我正在尝试开始,但出现错误

Caused by: java.lang.NullPointerException: null
at com.ex.calc.dao.AbstractObjectFactory.<init>(AbstractObjectFactory.java:21) ~[classes/:na]
at com.ex.calc.dao.GetTotalModelDAO.<init>(GetTotalModelDAO.java:28) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na]

同时,GetTotalModelDAO 使用 Lombok 库中的 @Component 和 @NoArgsConstructor 注释进行标记。

如果你从上到下,那么他对我的控制器发誓

Error creating bean with name 'restControllerGetRate': Unsatisfied dependency expressed through field 'commonLogicClass'

控制器有一个 CommonLogicClass 声明,并且还标有 @Component

@Autowired
private CommonLogicClass commonLogicClass;

然后他自然而然的发誓

Error creating bean with name 'commonLogicClass': Unsatisfied dependency expressed through field 'getTotalModelDAO'

在 CommonLogicClass 类中有一个声明 GetTotalModelDAO

@Autowired
private GetTotalModelDAO getTotalModelDAO;

并低于错误

Error creating bean with name 'getTotalModelDAO' defined in file [C:\Users\user124\Desktop\demo\target\classes\com\ex\calc\dao\GetTotalModelDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.ex.calc.dao.dao.GetTotalModelDAO]: Constructor threw exception; nested exception is java.lang.NullPointerException

我不明白为什么它会为 null 以及如何初始化组件。我读了很多东西,尝试了一切,到处都是如此简单,似乎可以启动,不需要任何额外的东西,但这里一切都是直的,一个管道((

public class GetTotalModelDAO extends AbstractObjectFactory<TotalModel> {

抽象对象工厂:

@Getter
public abstract class AbstractObjectFactory<T> extends ConnectionDB implements 
ObjectFactory {
private Connection connection;

{
    try {
        connection = getDataSource().getConnection();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

@Override
public abstract T getObject(Map<String, Object> params);
}

它只会继承 AppConfig 中的 ConnectionDB bean

@Bean
public ConnectionDB connectionDB() throws Exception {
    ConnectionDB connectionDB = new ConnectionDB();
    connectionDB.setDataSource(dataSource());
    return connectionDB;
}

哪个是单例

public class ConnectionDB {
private static DataSource dataSource;

private static volatile ConnectionDB instance;

public static ConnectionDB getInstance() {
    ConnectionDB localInstance = instance;
    if (localInstance == null) {
        synchronized (ConnectionDB.class) {
            localInstance = instance;
            if (localInstance == null) {
                instance = localInstance = new ConnectionDB();
            }
        }
    }
    return localInstance;
}

public static DataSource getDataSource() {
    return dataSource;
}

public static void setDataSource(DataSource dataSource) {
    ConnectionDB.dataSource = dataSource;
}
}

请提供建议,也许我以某种方式错误配置了一些东西。如果您需要更多信息,请说出来。

spring-mvc
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-01-22 15:58:42 +0000 UTC

如何将元素 id 传递给 React

  • 0

我试图理解 React js,但我不知道现在如何传递挂起函数的元素的 id 属性。

我有代码:

class Lable extends React.Component {

  render() {
    return (
      <p htmlFor="inp" className="inp">
      <label>
      {InputRequestRoad()}
      <span className="label">1:</span>
      <span className="border"></span>
      </label>
       </p>
    );
  }
}

function InputRequestRoad(prop) {
   function onKeyUp(e) {
     search(e.value);
   }

   return (
     <input type="text" id="road" placeholder="&nbsp;" onKeyUp={onKeyUp({this.id})}/>
   );
  }
ReactDOM.render(
 <Lable />,
document.getElementById("root")
);

如何将输入的 id="road" 传递给搜索功能?因为搜索函数开始解析输入并获取它的值

var field = document.getElementById(name);
console.log(field.value)

或者通常如何在每次击键后立即传输它?根据dock和examples,我仍然无法理解这一点。

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-01-19 04:08:51 +0000 UTC

如何将属性传递给 React js 中的 onClick 或 onKeyUp 元素?

  • 0

昨天我开始研究 React JS,我创建了一个脚本,它只是简单地向页面添加一个带有输入的表格。但是我仍然需要在这些输入上挂一个事件,我对它们进行了规定,但是当我启动页面时,会显示表格,但输入本身没有事件。你怎么能添加它们?

我的 react.js 脚本

'use strict';

ReactDOM.render(
<table class="table_report">
<tr>
  <td class="td_report">
    <div id="popup">
      <div id="popup_bg" />
      <div class="form">
        <p for="inp" class="inp">
          <label>
            <input type="text" id="road" placeholder="&nbsp;" onKeyUp="searchfield(this.id)"/>
            <span class="label">Дорога назначения:</span>
            <span class="border" />
          </label>
        </p>
      </div>
    </div>
  </td>
</tr>
</table>,
document.getElementById("root")
);

在输出我得到元素。也就是说,为什么它会删除事件?

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-12-30 17:01:11 +0000 UTC

Postgres 从 SETOF 获得价值

  • 1

能否请您告诉我如何获取 Postgres 中设置的 SETOF 的值?

我有一个返回 5 行的函数,例如,如何从中提取第三行?

例如,在另一个函数中,我需要将函数第 3 行的值赋给变量

var := my_setof_func(arg); - 我如何在这里指定我需要第三行?

我做了偏移+限制,但也许有更简单的东西

谢谢你。PS 扩展坞中没有任何信息。

postgresql
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-12-26 17:59:29 +0000 UTC

在地图中使用流

  • 0

帮助理解 pliz。

有一个Map:{params={par1=1, par2=name}},值也暗示了Map类型。

如何使用流将此地图的值转换为新地图以获得 {par1=1, par2=name} ?

试图做这样的事情

Map<String, Object> parameters = params.entrySet().stream()
        .filter(k -> k.getKey().equals("params"))
        .collect(Collectors.toMap(Map.Entry::getKey, v -> v.getValue()));

但我仍然得到以下结果 {params={par1=1, par2=name}}

尝试通过再次调用 stream 并添加 map(String::split) 来继续,例如,不起作用,最终不起作用

java
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-12-09 03:55:49 +0000 UTC

无法击败 java.lang.OutOfMemoryException:java 堆空间

  • 0

请提供有关如何击败 java.lang.OutOfMemoryException: java heap space 的建议。

PC上的RAM是8GB,我做了设置-Xms7G,我无法通过。具有 8GB 标准的 MacBook 上的主要功能。

本质是我从 xlsx 表单加载了大约 9000 行,正好落在 XSSFSheet.read 方法上。如果您在此文件中保留 5 行,则一切正常。

load 方法本身会为每一行创建一个对象。

            rateClass = new RateClass(разные параметры, около 10 штук);
            if (!mapOfRates.containsValue(rateClass)) {
                mapOfRates.put(i, rateClass);
                i++;
            }
            rateClass = null;

有人能告诉我为什么会这样吗((在更强大的机器上,16GB 的 RAM 和核心 i7 一切正常。

@Service
@Component
public class GetListOfRatesImpl implements GetList {
// Подключаем логгер
private static Logger logger = LoggerFactory.getLogger(GetListOfRatesImpl.class);

// Основаная мапа, куда записываем все маршруты
private Map<Integer, RateClass> mapOfRates = new HashMap<>();

// Переменные для работы с файлами
private File file;
private FileInputStream fileInputStream;

// Переменные для работы с Excel файлом(формат XLSX)
private XSSFWorkbook xssfWorkbook;
private XSSFSheet sheet;
RateClass rateClass = null;

private GetListOfRatesImpl() {
}

@Override
public void fillMap() {
    mapOfRates.clear();
    // Получаем файл формата xls
    try {
        fileInputStream = new FileInputStream(this.file);
        xssfWorkbook = new XSSFWorkbook(fileInputStream);

        // Заполняем Map данными
        sheet = xssfWorkbook.getSheetAt(0);
        int i = 0;
        for (int j = 1; j < sheet.getLastRowNum() + 1; j++) {
            XSSFRow row = sheet.getRow(0);

            String nameOfStationDeparture = null;
            String nameOfStationDestination = null;
            String customer = null;
            double rate = 0.00d;
            Date dateLoading = null;
            String nameCargo = null;
            String keyCargo = null;

            for (int c = 0; c < row.getLastCellNum(); c++) {
                if (row.getCell(c).getStringCellValue().trim().equals(JavaHelperBase.RATE_NAME_STATION_DEPARTURE)) {
                    XSSFRow xssfRow = sheet.getRow(j);
                    nameOfStationDeparture = xssfRow.getCell(c).getStringCellValue();
                }
                if (row.getCell(c).getStringCellValue().trim().equals(JavaHelperBase.RATE_NAME_STATION_DESTINATION)) {
                    XSSFRow xssfRow = sheet.getRow(j);
                    nameOfStationDestination = xssfRow.getCell(c).getStringCellValue();
                }
                if (row.getCell(c).getStringCellValue().trim().equals(JavaHelperBase.RATE_CUSTOMER)) {
                    XSSFRow xssfRow = sheet.getRow(j);
                    customer = xssfRow.getCell(c).getStringCellValue();
                }
                if (row.getCell(c).getStringCellValue().trim().equals(JavaHelperBase.RATE_NAME_CARGO)) {
                    XSSFRow xssfRow = sheet.getRow(j);
                    nameCargo = xssfRow.getCell(c).getStringCellValue();
                }
                if (row.getCell(c).getStringCellValue().trim().equals(JavaHelperBase.RATE_KEY_CARGO)) {
                    XSSFRow xssfRow = sheet.getRow(j);
                    if (xssfRow.getCell(c).getCellTypeEnum().equals(CellType.NUMERIC)) {
                        String val = Double.toString(xssfRow.getCell(c).getNumericCellValue());
                        double valueDouble = xssfRow.getCell(c).getNumericCellValue();
                        if ((valueDouble - (int) valueDouble) * 1000 == 0) {
                            val = (int) valueDouble + "";
                        }
                        keyCargo = val;
                    } else {
                        keyCargo = xssfRow.getCell(c).getStringCellValue();
                    }
                }
                if (row.getCell(c).getStringCellValue().trim().equals(JavaHelperBase.RATE_RATE)) {
                    XSSFRow xssfRow = sheet.getRow(j);
                    rate = xssfRow.getCell(c).getNumericCellValue();
                }
                if (row.getCell(c).getStringCellValue().trim().equals(JavaHelperBase.RATE_DATE_LOADING)) {
                    XSSFRow xssfRow = sheet.getRow(j);
                    dateLoading = xssfRow.getCell(c).getDateCellValue();
                    dateLoading.setHours(0);
                    dateLoading.setMinutes(0);
                    dateLoading.setSeconds(0);
                    if (dateLoading == null) dateLoading = new Date();
                }
            }
            rateClass = new RateClass(nameOfStationDeparture, nameOfStationDestination, customer, nameCargo, keyCargo, rate, dateLoading);
            if (!mapOfRates.containsValue(rateClass)) {
                mapOfRates.put(i, rateClass);
                i++;
            }
            rateClass = null;
        }
        logger.debug("Body rates: {}", mapOfRates);
    } catch (IOException e) {
        logger.error("Ошибка загруки файла - {}", e.getMessage());
    } catch (OLE2NotOfficeXmlFileException e1) {
        logger.error("Некорректный формат файла заявок, необходим формат xlsx");
    }
}

public Map<Integer, RateClass> getMapOfRates() {
    return mapOfRates;
}

public void setMapOfRates(Map<Integer, RateClass> mapOfRates) {
    this.mapOfRates = mapOfRates;
}

public void setFile(File file) {
    this.file = file;
    fillMap();
}
}

速率等级

public class RateClass implements Comparable<RateClass> {
// Подключаем логгер
private static Logger logger = LoggerFactory.getLogger(Route.class);

private String nameOfStationDeparture; // Станция отправления
private String nameOfStationDestination; // Станция назначения
private String customer; // Заказчик
private CargoClass cargo; // Груз
private double rate; // Ставка
private Date loadingDate; // Дата погрузки

public RateClass(String nameOfStationDeparture, String nameOfStationDestination, String customer, String nameCargo, String keyCargo, double rate, Date loadingDate) {
    this.nameOfStationDeparture = nameOfStationDeparture;
    this.nameOfStationDestination = nameOfStationDestination;
    this.customer = customer;
    this.cargo = new CargoClass(nameCargo, keyCargo);
    this.rate = rate;
    this.loadingDate = loadingDate;
}

public String getNameOfStationDeparture() {
    return nameOfStationDeparture;
}

public void setNameOfStationDeparture(String nameOfStationDeparture) {
    this.nameOfStationDeparture = nameOfStationDeparture;
}

public String getNameOfStationDestination() {
    return nameOfStationDestination;
}

public void setNameOfStationDestination(String nameOfStationDestination) {
    this.nameOfStationDestination = nameOfStationDestination;
}

public String getCustomer() {
    return customer;
}

public void setCustomer(String customer) {
    this.customer = customer;
}

public CargoClass getCargo() {
    return cargo;
}

public void setCargo(CargoClass cargo) {
    this.cargo = cargo;
}

public double getRate() {
    return rate;
}

public void setRate(double rate) {
    this.rate = rate;
}

public Date getLoadingDate() {
    return loadingDate;
}

public void setLoadingDate(Date loadingDate) {
    this.loadingDate = loadingDate;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    RateClass rateClass = (RateClass) o;
    return Double.compare(rateClass.rate, rate) == 0 &&
            Objects.equals(nameOfStationDeparture, rateClass.nameOfStationDeparture) &&
            Objects.equals(nameOfStationDestination, rateClass.nameOfStationDestination) &&
            Objects.equals(customer, rateClass.customer) &&
            Objects.equals(cargo, rateClass.cargo) &&
            Objects.equals(loadingDate, rateClass.loadingDate);
}

@Override
public int hashCode() {

    return Objects.hash(nameOfStationDeparture, nameOfStationDestination, customer, cargo, rate, loadingDate);
}

@Override
public String toString() {
    return "RateClass{" +
            "nameOfStationDeparture='" + nameOfStationDeparture + '\'' +
            ", nameOfStationDestination='" + nameOfStationDestination + '\'' +
            ", customer='" + customer + '\'' +
            ", cargo=" + cargo +
            ", rate=" + rate +
            ", loadingDate=" + loadingDate +
            '}';
}

@Override
public int compareTo(RateClass o) {
    return o.loadingDate.compareTo(this.loadingDate);
}
}

错误堆栈

java.lang.OutOfMemoryError: Java heap space
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.createChunk(Unknown Source)
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.ensureCapacity(Unknown Source)
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.createNode(Unknown Source)
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.createDeferredAttribute(Unknown Source)
com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.setDeferredAttribute(Unknown Source)
com.sun.org.apache.xerces.internal.parsers.AbstractDOMParser.startElement(Unknown Source)
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
org.apache.poi.util.DocumentHelper.readDocument(DocumentHelper.java:140)
org.apache.poi.POIXMLTypeLoader.parse(POIXMLTypeLoader.java:163)
org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown Source)
org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:226)
org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:218)
org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet(XSSFWorkbook.java:443)
org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:408)
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:169)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:300)
com.uraltranscom.dynamicdistributionpark.service.impl.GetListOfRatesImpl.fillMap(GetListOfRatesImpl.java:72)
com.uraltranscom.dynamicdistributionpark.service.impl.GetListOfRatesImpl.setFile(GetListOfRatesImpl.java:158)
com.uraltranscom.dynamicdistributionpark.controller.Controller.routeList(Controller.java:51)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java
  • 2 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-10-02 21:05:52 +0000 UTC

ORDER BY 导致性能下降

  • 1

请帮助优化请求。我不明白为什么使用 ORDER BY 实际时间会增加几倍至 150 毫秒,而没有 ORDER BY 15-5 毫秒。也许需要某种索引,但我不知道是哪一个

explain analyze
with recursive src as(   
select  
    d.station_id1 border_form, 
    d.station_id2 border_to, 
    d.country_key_station_id1 code1, 
    d.country_key_station_id2 code2,
    '/' || d.country_key_station_id1 || '/' || d.country_key_station_id2 || '/' as route,
    '' as route_distance,
    d.distance
from 
    test_distance.distances_border d 
where 
    d.country_key_station_id1 = 20
union all
select
    s.border_form,
    d1.station_id2 as border_to,
    s.code1, 
    d1.country_key_station_id2 as code2,    
    s.route || d1.country_key_station_id2 || '/' as route,
    s.route_distance || dc.distance || '+' as route_distance,
    s.distance + dc.distance as distance            
from 
    test_distance.distances_border d1 
join src s on d1.country_key_station_id1 = s.code2
    and not s.route like '%/' || d1.country_key_station_id2 || '/%'
join test_distance.distances_border_in_country dc on s.border_to = 
dc.station_id1 
    and d1.station_id1 = dc.station_id2         
)
select 
border_form, 
border_to, 
code1, 
code2,
    dist_start,
dist_transit,
dist_end,   
route,
distance + dist_start + dist_end as distance 
from (
select 
    border_form, 
    border_to, 
    code1, 
    code2,
    test_distance.get_distance('910000' , border_form, code1) as dist_start,
    route_distance as dist_transit,
    test_distance.get_distance(border_to , '720903', code2) as dist_end,    
    route,
    distance 
from src s 
where code2 = 29
order by distance
) r

如果按距离排序完全放在最后,那么实际时间会变得更长,从 180 毫秒开始,如果有人给我一个想法,我将不胜感激

查询计划

Subquery Scan on r  (cost=830.05..830.07 rows=1 width=160) (actual time=73.354..73.357 rows=22 loops=1)
CTE src
->  Recursive Union  (cost=0.00..825.38 rows=185 width=125) (actual time=0.030..7.470 rows=1046 loops=1)
      ->  Seq Scan on distances_border d  (cost=0.00..4.70 rows=35 width=26) (actual time=0.024..0.135 rows=35 loops=1)
            Filter: (country_key_station_id1 = 20)
            Rows Removed by Filter: 125
      ->  Hash Join  (cost=32.86..81.70 rows=15 width=125) (actual time=0.948..1.189 rows=169 loops=6)
            Hash Cond: (((dc.station_id1)::text = (s_1.border_to)::text) AND ((dc.station_id2)::text = (d1.station_id1)::text))
            ->  Seq Scan on distances_border_in_country dc  (cost=0.00..27.60 rows=1660 width=18) (actual time=0.002..0.065 rows=1660 loops=5)
            ->  Hash  (cost=28.68..28.68 rows=279 width=166) (actual time=0.882..0.882 rows=508 loops=6)
                  Buckets: 1024  Batches: 1  Memory Usage: 8kB
                  ->  Hash Join  (cost=11.38..28.68 rows=279 width=166) (actual time=0.273..0.749 rows=508 loops=6)
                        Hash Cond: (d1.country_key_station_id1 = s_1.code2)
                        Join Filter: (s_1.route !~~ (('%/'::text || (d1.country_key_station_id2)::text) || '/%'::text))
                        Rows Removed by Join Filter: 1475
                        ->  Seq Scan on distances_border d1  (cost=0.00..3.60 rows=160 width=22) (actual time=0.002..0.010 rows=160 loops=6)
                        ->  Hash  (cost=7.00..7.00 rows=350 width=152) (actual time=0.046..0.046 rows=174 loops=6)
                              Buckets: 1024  Batches: 1  Memory Usage: 23kB
                              ->  WorkTable Scan on src s_1  (cost=0.00..7.00 rows=350 width=152) (actual time=0.001..0.017 rows=174 loops=6)
   ->  Sort  (cost=4.67..4.68 rows=1 width=152) (actual time=73.351..73.352 rows=22 loops=1)
    Sort Key: s.distance
    Sort Method: quicksort  Memory: 28kB
    ->  CTE Scan on src s  (cost=0.00..4.66 rows=1 width=152) (actual time=7.986..73.318 rows=22 loops=1)
          Filter: (code2 = 29)
          Rows Removed by Filter: 1024
    Planning time: 1.990 ms
    Execution time: 73.654 ms

我看到好像一直在排序,但是我不知道如何理解写的内容:(

sql
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-09-27 14:28:58 +0000 UTC

如何在 Postgres 中的 SELECT 中迭代二维数组

  • 0

谁能告诉我如何在 Postgres 的 select 中对数组进行排序?

例如,有一个数组

{{1,2,3,4,10,12},{1,4,3,3,25,14},{1,6,3,3,11,14}}

我需要得到 5 和 6 个元素的总和,并按降序显示行,也就是应该变成这样

1,2,3,4,22
1,6,3,3,25
1,4,3,3,39

澄清,这些是单独的列,而不是整行

是否可以通过窗口函数以某种方式做到这一点,而不是通过函数和循环,即选择?通过该功能,我一切都很好。这里要了解是否可以用select对数组进行排序。

澄清一下,最初元素个数是未知的,也就是选择array[1:1]、array[1:2]等不会下功夫。

sql
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-09-06 15:58:34 +0000 UTC

获取Tomcat目录路径

  • 0

请告诉我是否有人知道。是否有可能在java中以某种方式获取Tomcat的根路径?

例如,现在我在这里有一个文件 C:\OAPI\tomcat8\apache-tomcat-8.5.24\save\saveDistanceMap.ser 并且路径在 java 代码中是硬编码的。

但是我在另一台机器上运行应用程序并且路径不同,那么它当然看不到这个文件。

我可以使用一些工具来获取应用程序启动时的路径,并且只需将代码中的文件名替换为变量吗?

我读了表格,我没有发现任何明智的东西。

java
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-07-27 15:43:04 +0000 UTC

为什么所有地图中的数据都会更新

  • 1

我不明白我的数据是如何在所有三个地图中更新的?

public void updateMap(Map<String, WagonFinalInfo> map, String wagons, String rates, String tariffs) {
    List<WagonRateAndTariff> listRateAndTariff = PrepareDateForInsert.fillListForUpdate(wagons, rates, tariffs);
    Map<String, WagonFinalInfo> oldMap = new HashMap<>(map);
    Map<String, WagonFinalInfo> tempNewMap = new HashMap<>(map);
    logger.debug("listRateAndTariff: {}", listRateAndTariff);
    for (Map.Entry<String, WagonFinalInfo> _map: tempNewMap.entrySet()) {
        for (WagonRateAndTariff list : listRateAndTariff) {
            if (_map.getKey().equals(list.getNumberOfWagon())) {
                if (_map.getValue().getRate() != (Double) list.getRate()) {
                    _map.getValue().setRate(list.getRate());
                }
                if (_map.getValue().getTariff() != (Double) list.getTariff()) {
                    _map.getValue().setTariff(list.getTariff());
                }
            }
        }
    }
    newMapWagonFinalInfo.putAll(tempNewMap);
    logger.info("newMapWagonFinalInfo: {}, oldMap: {}", newMapWagonFinalInfo, oldMap);
    classHandlerInsertRateOrTariff.insertDate(newMapWagonFinalInfo, oldMap);
    calculateYield(newMapWagonFinalInfo);
}

他们像 in 一样更新它tempNewMap,但是在输出中我得到了 inmap和 in 的更新oldMap,这不应该是。这是怎么发生的?

java
  • 2 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-05-28 21:18:24 +0000 UTC

如何从处理器调用 RouteBuilder

  • 0

我正在学习Camel,遇到了一个问题,如何从流程方法中调用所需的路线?我正在使用 Java JSL。有一堂课

public class PaysRoutBuilder extends Environement {

@Override
public void configure() throws Exception {
    getPropertiesComponent();

    /* Get token */
    from("timer:gettoken?period=20000")
            .process(getAuthTokenProcessor)
            .to("direct:ssoCall");

    from("timer:name?period=20000&fixedRate=true")
            .process(searchClientsPropProc)
            .choice().when(exchangeProperty(Start.title))
            .process(getDBDocumentsProc);

环境类

public abstract class Environement extends RouteBuilder {
   Processor searchClientsPropProc = new SearchClientPropsProc();
   Processor getDBDocumentsProc = new GetDBDocsProc();
   Processor getAuthTokenProcessor = new PrepareAuthTokenHeaders();
}

有一个类添加路由器

public class Setup {

public Main setup(String... args) throws IOException {
    Main main = new Main();
    main.enableHangupSupport();

    RouteBuilder paysBuilder = new PaysRoutBuilder();

    main.addRouteBuilder(paysBuilder);
    main.addRouteBuilder(new SsoCallRoute());

    return main;
}
}

在这里,在某些条件下,我需要在 getDBDocumentsProc 处理器中重新调用“timer:gettoken”路由。

我不知道该怎么做,我尝试了不同的方法,最后一个是这样的,我就是找不到怎么做((

new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("time:name").to("time:gettoken");
            }
        };

请告诉我如何在处理器中调用路由器。

camel
  • 1 个回答
  • 10 Views
Martin Hope
Владислав
Asked: 2020-05-17 15:51:00 +0000 UTC

RouteBuilder 骆驼

  • 1

帮助了解骆驼路线pliz。我读过但我不明白,我了解如何通过 XML,但我需要通过 Java 类来完成,并且没有 Spring。需要从属性文件,也就是endpoint,做一个查询字符串。然后执行它(例如http://server:22000/api/token?login=login&pass=pass)

响应应该是一个令牌。这是我的课,所有东西都是从码头拿的,但我不清楚 from("direct:start"),什么是 direct:start,还是我应该在这里写点别的?例如只是获取地址?这只是我在做实验。

public class PrepareOapiForAuthTokenRoute extends RouteBuilder {

final String applicationProperties = "application.properties";

@Override
public void configure() throws Exception {
    from("direct:start").process(new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
            System.out.println("2222");
        }
    });

}

public String gerUrl() throws IOException {
    Properties applicationProps = new PropUtils().readProperties(applicationProperties);
    String user = (String)applicationProps.get("oapi.user");
    String url = (String)applicationProps.get("oapi.url");
    String pass = (String)applicationProps.get("oapi.password");
    String fullUrl = url + "?login=" + user + "&password=" + pass;
    System.out.println(fullUrl);
    return fullUrl;
}
}

我像这样进行测试,但什么都没有出现在我身上,即使只是一条线表明一切都已完成

public class PaysRouteBuilderTest {

final private static Logger LOG = LoggerFactory.getLogger(PaysRouteBuilderTest.class);


@Test
public void test() {
    RouteBuilder builder = new PrepareOapiForAuthTokenRoute();
    try {
        builder.configure();
    }catch (Exception e) {
        LOG.error("Exception: ",e);
    }

}
}

我做了这样的测试,它甚至似乎可以工作并构建一条线,但是处理器本身不工作,即消息不显示

public class PaysRouteBuilderTest extends CamelTestSupport {

final private static Logger LOG = LoggerFactory.getLogger(PaysRouteBuilderTest.class);
final String applicationProperties = "application.properties";


@Test(timeout = 10000)
public void testMethod() throws Exception {
    Thread.sleep(5000); // Нужно, чтобы Camel успел обработать файлы, до завершения теста
}

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        public void configure() {
            from("direct:start")
                    .setHeader(Exchange.HTTP_METHOD, constant("GET"))
                    .to("http:" + gerUrl()).process(new Processor() {
                        @Override
                        public void process(Exchange exchange) throws Exception {
                            //HttpServletResponse response = exchange.getOut().getBody(HttpServletResponse.class);
                            System.out.println("ghjhh");
                        }
                    });
        }
    };
}

public String gerUrl() {
    Properties applicationProps = null;
    try {
        applicationProps = new PropUtils().readProperties(applicationProperties);
    } catch (IOException e) {
        e.printStackTrace();
    }
    String user = (String)applicationProps.get("oapi.user");
    String url = (String)applicationProps.get("oapi.url");
    String pass = (String)applicationProps.get("oapi.password");
    String fullUrl = url + "?login=" + user + "&password=" + pass;
    return fullUrl;
}
}
java
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5